Replaced PartitionTextFileWriter with PartitioningDataStoreWriter - a mo...

...re generic implementation with pluggable entity writers and serialization formats.

Refactored the code so that writing, sharding and partitioning are separate concerns. 

The ShardedDataStoreWriter accepts a DataStoreWriterFactory to decouple it from the writing implementation.

The PartitioningDataStoreWriter accepts a ShardedDataStoreWriter, a PartitionStrategy and a Serializer which converts the entities to be written to the type accepted by the DataStoreWriters.

Some of the various *ObjectSupport methods have been made public so that they can be used from the DataStoreWriterFactory implementations (such as TextFileWriterFactory).
We don't want to have `getPartitionStrategy` or `getSerializer` in a writer interface. These were originally modelled to be close to `java.io.OutputStream` and other `java.io` classes.