Initialize cleanup function list at compile time

Before, we used a `CORK_INITIALIZER` function to initialize the linked
list of cleanup functions.  However, this means that you can't register
cleanup functions inside of other `CORK_INITIALIZER` functions, since
there's no guarantee what order they'll be called in.  Instead, we use a
static initializer to make sure the cleanup list is ready to go before
any `CORK_INITIALIZER` functions are executed.