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.
I don't think we should introduce a Kite-specific data model that has slightly different behavior. Instead, we should test the incoming class and determine the correct data model to use. So if the type is GenericRecord.class, we use GenericData, or [SpecificRecord.class](http://avro.apache.org/docs/1.7.6/api/java/org/apache/avro/specific/SpecificRecord.html) => SpecificData, and so on. Then default to reflect if we have no match.

That way, we would be able to register different data models like protobuf or ruby ([IRubyObject.class](http://jruby.org/apidocs/org/jruby/runtime/builtin/IRubyObject.html) => RubyData).

This also guarantees that we handle records exactly as the right avro data model would.