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.
Maybe a DataUtil SPI class would be appropriate with both of those methods. We also need to fix how we get data fields from records and we could take care of this at the same time.

Basically, we currently have a few `get` methods littered around that either use the field index or create an accessor for a `getSomeField` method. We should be using ReflectData.get().getField(...) and the equivalent set verison (those work for generic, specific, and reflect). But we need to transition from the current method without breaking. This could be a good opportunity.