Pass an MVMCollectable* to MVM_ASSIGN_REF(), without using casts.

All derivatives of MVMObject and MVMSTable contain a nested MVMCollectable
struct. By using structure member access, we can get a pointer to it without
using a cast. This encourages type safety, and reduces the number of casts and
hence places that might conceal strict aliasing violations.
Convert MVM_WB to an inline function MVM_gc_write_barrier().