Fixed bug in which invalid memory accesses could occur.

Previously, the assumption was made that all buffers were at least
8 bytes long (the size of a 64-bit word). This didn't hold true
for structures whose total bit width was less than 56. Now, for
such structures, there's a special packer and a special unpacker,
both of which stack-allocate a full 8-byte array, use that as the
argument to the normal packers, and then copy over to the user-
supplied slice.