Use serialization

Add serialisation to Buxton instead of directly storing a struct in gdbm.
Confirmed that all data types now work, resolving previous segfaults and removing the requirement for fixed length strings.

**Note**: Identical to my last pull request at time of creation, simply rebased and force-pushed. GitHub didn't like it and wanted to merge 22 commits so I've redone this