Removed the object oriented encoding/decoding scheme in favor of
a model where encoding/decoding happens when a dataset is
stored to/ loaded from a DataStore.

Conventions can now be enforced at the DataStore level by
overwritting the Datastore.store() and Datastore.load() methods, or
as an optional arg to Dataset.load_store, Dataset.dump_to_store.

Includes miscelanous cleanup.