Hack in the GC to fix errors in threaded code.

An object is ignored by the GC until the GC is told about it. Ideally,
every allocated object should be entered in the GC with the
gc_frame_newslot, gc_frame_setslot, gc_root or gc_transit functions.

This fixes issues with the GC in threads (e.g. thread 2 preempting
thread 1 and running the GC at an unsafe point of thread1. For example,
between an allocation and a gc_* call marking the object as reachable.)

Since not all objects are properly registered with the GC in the current
genc code this leads to a somewhat significant memory leak.