job and dataset history is now human-readable

Fixes #52

Instead of using the default FileDataStoreFactory that saves serialized
objects to disk, we now have a new implementation that uses an
excessively basic format - one key value string pair is on each line in
the form:
key1——value1
key2——value2

This new data store is capable of loading the older format, so no
history should be lost due to this change.

The first time a new dataset or job is saved, then the history file
will be rewritten, and will be hand editable from then on.

Unfortunately, this new ReadableFileDataStoreFactory has way more code
than it should simply because the classes it wants to extend are all
package protected :(

It also isn’t thread safe anymore, because preserving that
functionality wasn’t worth the extra code duplication.