Disable noncollectible alc finalization (dotnet/coreclr#21189)
* Disable noncollectible AssemblyLoadContext finalization
The constructor of AssemblyLoadContext was missing a call to
GC.SuppressFinalize for non-collectible AssemblyLoadContext. That means
that the finalizer can be executed and unloading being initialized even
for non-collectible AssemblyLoadContext.
This change fixes that.
* SuppressFinalize non-collectible AssemblyLoadContext
The finalizer for the non-collectible AssemblyLoadContext is never
called and so it should not be in the finalization queue.
* Handle finalizer call without constructor executed
Check if the constructor was executed before we run the finalizer code.
Commit migrated from https://github.com/dotnet/coreclr/commit/
ac732ffb6d2ff4d2bec72ac5ca0785ace4ace20a