CDK-121: Updating DatasetReader interfaces.

This adds Iterable<E>, Iterator<E>, and Closeable to DatasetReader. The
implementations now use an abstract parent class that has default remove and
iterator implementations, as well as updates to transition from read() to
next(). This class is in the new SPI package, which is currently excluded from
the javadocs until we add more classes and better docs.

See the discussion in JIRA CDK-121.