In process_worklist(), assert() that various assignments are unneeded.

Also assert that if the pointer is in to-space already, it is never marked as
gen2.
Re-order code in process_worklist() to avoid checking tospace for gen2 items.

Still run the sanity test for tospace even on items marked as gen2.
Mark gen2 as live using a flag bit instead of the forwarding pointer.

This means that the forwarding pointer is now only used on dead objects.
Use a flag to indicate which items in fromspace are live (during GC).
Some GC marking sanity check asserts.
Encapsulate SC access through MVM_sc_{get,set}_{stable,obj}_sc()

Ideally these would be inline functions.
Assert that no SC accesses happen on objects mid-GC.
Move struct MVMCollectable's MVMSerializationContext pointer into a union.
Add a MVMSTable member to the union to hold the chain of STables to free.

Previously these were stored in the forwarding pointer, which necessitated
casts.
Move the forwarder to the union.

This shrinks every Object and STable by 8 bytes on systems with 64 bit pointers,
and 8 bytes on systems with 32 bit pointers that require 64 bit alignment.