CDK-197: Adding generic to Dataset.

Dataset is now Dataset<E> because a Dataset stores a type of record.
Before, that type was introduced when Dataset#getReader or getWriter was
called, but with the addition of Views it is now necessary to carry the
type on the Dataset and View for View#contains(E) rather than
View#contains(Object). In addition, this more closely models the data.
It used to be possible to call getReader and getWriter on the same data
set and have differently typed reader and writer objects. Now, both get
the type from the Dataset and View.