[Local GC] Move Weak Reference finalization out of the GC (dotnet/coreclr#10676)
* [Local GC] Move Weak Reference finalization out of the GC
* Address two issues:
1) Use GetGCSafeMethodTable instead of GetMethodTable, so that the
mark bit is correctly masked off the object's method table pointer,
2) Address code review feedback by re-inserting a missed call to
GetCanonicalMethodTable and rename the new API to EagerFinalized to
better illustrate its broader purpose.
* Repair the GC sample
Commit migrated from https://github.com/dotnet/coreclr/commit/
be8504bd8a63962c84567990f0b84019f299166c