[sgen] Stop concurrent worker during concurrent update and nursery collections.

The two collectors stepped on each other's toes.  Specifically, updating the mod union
card table while the worker thread might mark cards in the card table will not work.

The simplest solution for now is to stop the worker thread during concurrent updates
and nursery collections.  In the future we can have the thread help with the nursery
collection.
[sgen] Move heap checks before pinning.
[sgen] Add assertions.
[sgen] Optional check that the concurrent collector doesn't update references.
[sgen] Make `check-mark-bits` also scan nursery objects.
[sgen] When out of memory, finish concurrent with scanning whole nursery.  Fixes #23401.

If we run out of memory during the nursery collection in the finishing collection pause,
there will be late-pinned objects in the nursery: pinned objects that were not pinned
from conservative roots (or cementing).  We need to scan those, too, so in that case
we just walk the nursery and scan all objects.