[sgen] Make GC handles table lock-free.
The previous code was hard to make lock-free because it was trying to
coordinate three separate buffers: one of GC handles, one of a
free-bitmap, and one used to get the domain ID for an expired weak
reference. Now all of this information is stored in a single tagged
pointer per entry.
* Make the GC lock non-recursive again.
* Correctly null links for domain unloading.
* Ensure that non-weak handles are registered as roots using the
correct descriptors.
15 files changed: