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.