Release resources in lliby_apply before calling

Do everything inside a block so the ProcedureCell/StrongRefRange are
destructed before calling the procedure. This reduces the resources we
use during recursive calls to (apply) and might allow tail call
optimization.
Lazily start the finalizer worker thread

Only launch the worker thread on the first call to finalizeBlockAsync.
This should reduce the overhead for programs that never GC. This should
also work around a weird issue on Mac OS X 10.9.1 that seems to cause
crashes when allocating new memory while a program becomes threaded.
Custom implementation on CellRefList

This switches from a std::list<AllocCellRefRange> to a custom allocator
that allocates list nodes with embedded data from a single mmap()'ed
page.

A benchmark creating three strong references to newly allocated strings
in a loop was sped up ~3x while the same benchmark referencing the empty
list element singleton was sped up ~10x. This included garbage
collection and background finalization which makes it even more
impressive.
Add CMake variable for enabling GC debugging

cmake -DENABLE_GC_DEBUGGING=yes will enable all the relevant defines for
GC debugging. This is a lot easier than manually editing the CMake cache