Add destructor for ImmixGC

We need to cleanup the walker here if it has been allocated, otherwise
we have a memory leak on shutdown when we don't clean this up.
Add more debugging helpers for GC debug

This overwrites the used memory so invalid reuse is easier to detect
when GC debug is enabled.
Fix GC crash with ObjectWalker and callback into Ruby

This fixes a crash issue, where the object walker was walking memory and
a GC happened during this. This was possible because the object walker
calls back into Ruby land if a callable object is passed down. If that
happened and the walker stack still had live objects, they could point
to invalid memory.

This could happen because the object was moved in the BakerGC or no
longer marked as live in the marking phase. In either case, it would
cause crashes because of the memory being reused for other purposes.

This change makes sure these objects are kept alive and are properly
updated if the GC moves them. We setup a proper variable buffer for this
just before we call back into Ruby so the GC knows about it.

Fixes #2444 and also probably other sporadic crash issues that I've seen
on Travis and in other places.