Customized allocator for thread-local storage

On some platforms (currently just Mac OS X), we have to allocate
thread-local variables from the heap.  Before, that meant that we
couldn't use thread-local inside of a custom allocator: `cork_tls` uses
`cork_calloc` to perform that allocation, which calls back into the
custom allocator, giving us an infinite loop.  The new
`cork_tls_with_alloc` macro allows you to provide custom allocation and
deallocation functions; to break the infinite loop, your custom
allocator can use this new macro to allocate the thread-local data using
the parent allocator.