[WIP] Custom memory allocation

I think I finally cracked the nut on custom memory allocation.  Back in the ~0.3 versions, libcork had custom memory allocation, but it was very invasive: you had to pass around lots of `cork_alloc` pointers all over the place.  I dropped custom allocators to make the memory allocation API much cleaner (and much closer to the standard `malloc` family of functions).

This patch adds back in the ability to customize the details of how memory is allocated, but without requiring lots of allocator pointers — and most importantly, in a way that lets different sections of the program have *different* custom allocators.  The key is the `cork_current_allocator` macro, and in how all of the allocation functions are defined static in a header file.  That allows different source files to provide different values for `cork_current_allocator`, which their copy of the static allocation functions will use.

There are two breaking changes.  The first is that you must now use `cork_free`, `cork_cfree`, or `cork_delete` to free memory that you've allocated, instead of the standard `free` function.  The second is that you must keep track of how large each allocation is, and pass that in to whichever free function you use.
The `x` prefix means that it returns `NULL` if memory allocation fails, instead of aborting the program.  The `f` suffix is a BSD-ism.  The standard `realloc` returns `NULL` on allocation failure, but doesn't do anything to the original pointer.  So the most common way of calling `realloc` can produce a memory leak.  (There's a paragraph about this in the current docs.)  BSD added a `reallocf` which frees the original pointer if the reallocation fails.

So the difference between `realloc` and `xrealloc` is whether the program aborts, and the difference between `xrealloc` and `xreallocf` is whether the original pointer is freed.

We don't need to mention `xreallocf` in `allocator.c` because when you write a new allocator, you only need to provide an implementation of `xrealloc`.  We can implement `xreallocf` (as we do here) in terms of the `xrealloc` and the `free` that you provide.