[runtime] Ensure mono_class_setup_supertypes is atomic and drop the loader lock around it.
[runtime] Introduce the icall lock to be used when looking up icall related information.
[runtime] Protect MonoImage::generic_def_objects with the image lock and not the loader lock.
[runtime] Protect mono_create_icall_signature with the corlib image lock.
[runtime] mono_metadata_clean_for_image no longer needs to return a free list of classes.
[runtime] Cleanup usage of reflection_info_unregister_classes. Move it under the image lock and use image memory.
[runtime] Change deregister_reflection_info_roots to not take the loader lock.

We should not need the loader lock here as this only deals with dynamic images
that belong to the current domain that is been shutdown.

To ensure this is the case, added an assert to mono_image_append_class_to_reflection_info_set.
[runtime] The assembly bindings are now protected by a separate lock instead of the loader lock.
[runtime] Don't hold the loader lock when calling mono_mb_create_method.

mono_mb_create_method no longer requires the loader lock. All use sites
replace the loader lock with simpler locks.

Those new locks cannot be held while we're building the methods themselves
as that piece of code does type resolution - thus taking the loader lock.
[runtime]Replace the loader lock with the marshal lock in mono_marshal_load_type_info.

In order to make this possible, we now construct the marshal information without holding
any locks and then double-check on publication.
[runtime]Add the marshal lock to the lock tracer.
[runtime]Fix deregister_reflection_info_roots_from_list to avoid full type resolution during unload.
[lock-tracer]Workaround ASLR on OSX by recording offsets to the main binary base address.
[lock-tracer]Update the decoder to handle the current runtime and OSX.