Fixing a typo in "How to Contribute".
Adding @since annotation to DatasetReader#next.
CDK-128: Repository get => load, drop => delete.

Renaming DatasetRepository methods for the API update. This introduces
AbstractDatasetRepository in the SPI for compatibility, which the two
repository implementations now inherit from.
CDK-128: Migrating FS repository test to new API.
CDK-128: Updating HCatalog to consume the new API.
CDK-128: Updating HCatalog tests for new repo API.
CDK-128: MetadataProvider save => create, update.

Splitting the MetadataProvider#save method into create and update for the API
changes. This introduces an AbstractMetadataProvider in the SPI for
compatibility, which the two implementations now inherit from. To correctly
send method calls from the old save method to either create or update, the
abstract base class needed to determine whether a descriptor already exists.
Currently, the only way to do this is by calling load. This is how the save
method is currently implemented, but it exposes the need in the API for an
exists call. If users need to know if a data set or descriptor exists, and the
API throws an Exception if they are wrong, then there needs to be a way to get
that information. This should be added with list().

The HCatalog implementation has also been updated to (correctly) throw a
MetadataProviderException when the HCatalog library can't open a table, rather
than a RuntimeException. Without this, the save implementation in
AbstractMetadataProvider doesn't work.
CDK-128: Updating HCatalog tests for the new API.
CDK-128: Adding NoSuchDatasetException.

Callers should be able to handle a missing dataset. NoSuchDatasetException will
be thrown when an operation is requested on a data set or descriptor that is
missing---except for delete, which returns false. This also fixes a problem in
the AbstractMetadataProvider's save implementation, where it had to assume that
any MetadataProviderException meant that the descriptor was missing. Now, it
catches just the NoSuchDatasetException and correctly calls either create or
update.
CDK-128: Updating FS data sets for API changes.

This breaks the FileSystemMetadataProvider#save method into create and update,
but keeps most of the common functionality in a private writeDescriptor method.
Now, create checks to see that it is not overwriting and existing data set and
update assumes the descriptor exists and tries to overwrite it.

This commit also cleans up Path handling between the FS DatasetRepository and
the FS MetadataProvider. The repository is responsible for deciding where data
will be stored, so the metadata provider should delegate to it. To avoid a
circular reference, both now depend on a protected static method to determine
how data paths are created (while not great, this is better than both
constructing paths separately). They both also have pathForDataset
implementations that check the repository root is not null (via checkState).
This addresses the "what happens on windows?" comment in MetadataProvider by
replacing / with Path.SEPARATOR_CHAR, although it is unclear why this happens
at all.

Another fix in this commit is to handling delete. Before, delete would delete
the data folder only if the metadata was deleted, but not it if it was missing
(already deleted). Now, the return of MetadataProvider#delete is ignored: the
DatasetRepository does not require that the metadata is deleted at the same
time, just that it is gone and did not throw an Exception.
CDK-128: Updating FS provider tests for API change.
CDK-128: Adding list and exists.

This adds new API methods, list and exist, to DatasetRepository, and exists to
MetadataProvider. This commit also adds implementations for FileSystem and
HCatalog data.
CDK-128: Adding DatasetDescriptor.Builder copy constructor.

The purpose of this constructor is to help callers copy and update
DatasetDescriptor objects, which are Immutable and can't be modified.
CDK-128: Updating docs for recent API changes, warnings.
CDK-128: Fixing a bug in test utilities.

findSchemaURI was ignoring the passed String resource and only loading
schema/user.avsc.
CDK-128: Correcting @since in javadocs.
CDK-128: Adding FS tests for new repo API methods.
CDK-128: Extracting reusable DFS test code.

The new MiniDFSTest superclass sets up and tears down a MiniDFSCluster and
makes both local and distributed FileSystems available via getDFS and getFS.
CDK-128: Updating FS Dataset tests to run in a DFS.
CDK-128: Adding much more testing for core Readers.

TestDatasetReaderCommon now has tests that should pass for all DatasetReaders,
and can be extended by implementers to verify new DatasetReaders. The other
*Common tests apply these tests to the single and multiple file readers.

Also added a lot of new tests for error cases and some convenience methods in
DatasetTestUtilities. Found a few bugs, which are fixed and included.