Allocator implemented as functions

We provide several allocation functions that abort if the allocation
fails (cork_malloc, etc).  Before, these were implemented as macros,
which meant that the “check for NULL and abort” logic was repeated each
and every time user code allocated memory.  Failures are infrequent
enough, and you get enough information from the resulting core dump,
that we can implement the allocators as functions instead.  This makes
the resulting code a bit smaller.