Simpler error API

This patch simplifies the libcork error API.  Before, we followed glib's
GError API, where there were separate “classes” and “codes” for each
custom error condition.  The class was meant to identify the library
that the custom error belongs to, and the code only had to be unique
within each class.  GError creates error class values at runtime, using
its GQuark mechanism.  We use hashes of unique strings as error classes.
Error codes were then defined using a simple enum.

This is more cumbersome than it needs to be.  With this new patch, we no
longer have error classes at all.  Individual error codes are now hash
values, usually of the name of the error code's macro.  (I.e., the
value of the `CORK_PARSE_ERROR` error code is the hash of the string
`"CORK_PARSE_ERROR"`.)  This new design also lets us use the existing,
predefined, well-known POSIX `errno` values as error codes directly,
which makes it easier to integrate code that uses the POSIX error
reporting facilities and libcork's error API.