Binary serialization of the data structure.

Motivation: GHC has a difficult time parsing large numbers of strings at
compile time. Instead, let's serialize the data to a binary blob and
stick it in a C source file, which can then be read in via the FFI.

The patch ended up becoming a bit more complicated than I'd intended.