Fix errors in hhbbc with no-refcount
Initial work on a tracing garbage collector
Further attempts to trace the heap
Appear to be successfully tracing the heap
Cleaned up tracing
Change MarkSweepCollector to a thread-local singleton
Start to add new block-based memory management API
More work on block allocator
Block allocator working successfully.

Tests appear to mostly be working
Attempt to remember objects which have destructors
Cleanup of previous commit
Align GC-enabled slabs to a known value

This will make garbage collection easier, as we can
quickly tell what block an address belongs to
Add check to fix segfault in tracing-collector.

Not sure what was causing it at this stage.
Tracing collector marks which blocks are in use.

Next step is to be able to figure out what blocks have been used,
but are now garbage. We can then return them to the allocation
queue.
Port changes from the tracing branch.

Blocks are now marked as allocated, so the garbage collector is
able to determine what blocks need to be freed.
Switch Slab and Block structs to use void * pointers
Add method to recycle blocks back into the allocator
Add surprise flag so a GC call can be requested for the next function
Undo changes to jit surprise flags
Condition flags: extend bit usability from 8 bits to 32 bits

Summary: We currently use all 8 usable bits of condition flags, but we keep
memory for sizeof(ssize_t)*8 bits. Extend usability from 8 bits to 32
bits to allow new bits to be introduced.

Reviewed By: @billf

Differential Revision: D1350845