Finished custom serialization

Since there are only 3 serialized fields this seemed safe.
The first two bits of each serialized object are an identifying code for
how they should be decoded, as per ByteConverter. It calls the
appropriate method and decides if a given chunk is empty.

Tests were added to ensure that this works as intented.

The databases were also updated to use this method. The utilities
convert/revert still exists for the Field's value objects and for the
legacy LinearMemoryDatabase.