Hide mempool implementation details

The `cork_mempool` type is now completely opaque, which moves us one
step closer to declaring a stable ABI for libcork.  This means that you
can no longer embed a `cork_mempool` directly into your own types.  This
gives us more flexibility in the future to change the implementation
without breaking existing code.

(The main reason for allowing embedded `cork_mempool` objects was to let
us implement `cork_mempool_new_object` as a static inline function.  But
that's not really useful; the performance benefit is negligible, and it
complicates the API.  So that's now a regular CORK_API function.)

As part of this update, the initialization and finalization callbacks
now include a `user_data` parameter, like all good callbacks should.
(We already had function pointer types for these callbacks, we just
needed to use them!)

And lastly, the functions for allocating and freeing an object in the
memory pool have been renamed to `cork_mempool_new_object` and
`cork_mempool_free_object`.  After all, they weren't creating or freeing
the memory pool itself...