Rewrite

The library has been rewritten to move work into subclasses, including a set of value transformers that are responsible for encoding different data types.