CDK-496: Added the type parameter to the Datasets API

I also went through and extended the use of the type parameter down to at least Avro files
and CSV files. In order to support Parquet and HBase, I think more work needs to be done
on the underlying stores. But if I missed something, I can get those in before the merge.
Something like:

 <E> GenericData getDataModelForType(Class<E> type)?

The only potential problem is that we currently use ReflectDatumReader, so I think actually I'd return the DatumReader based on the type:

<E> DatumReader getReaderForType(Class<E> type)