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.
No. That means that the user passed in Object.class, or just used the legacy DatasetRepository APIs, which default to getting the class from the schema. If the Schema doesn't map to a class that means that the it should be using GenericData.Record. It might be cleaner to set the type to GenericData.Record.class if getClass() returns null rather than letting the null persist.