minor performance enhancements
Remove warning for duplicate sources in PartitionStrategy.

Source fields can be used more than once.
Add descriptor validation for partition strategy.
Allow partition names to duplicate field names, add test.

This updates the warning in the PartitionStrategy builder so that it
does not catch when partition names duplicate source names from the
schema. This is a common practice in HBase, where the key is actually
used to store the value for some fields.
CDK-153: Add tests for generated Hive partitions.
CDK-46: Update Hive schema conversion to use visitor pattern.

This extracts the recursive structure of the Hive schema conversion into
a visitor pattern in SchemaUtil that can be used for validations. This
also correctly catches recursive schema definitions by using the visitor
to track records that are being processed.
CDK-46, CDK-261: Add Compatibility checks and tests.

This adds a new SPI class, Compatibility, that checks known
compatibility problems. It provides precondition-style validations for
Hive that throw IllegalStateException or IllegalArgumentException, as
well as a checkAndWarn method for FS that will perform the same checks
and warn about problems rather than throwing an Exception.
CDK-46, CDK-261: Add Compatibility checks to FS and Hive.
Implement review recommendations.
CDK-369: Update to use NullPointerException.
Add directoryIterator for FileSystemViews

Add a method to iterate over leaf-level directories of a
FileSystemView to allow minimizing the number of paths passed
in to a Crunch Source.
Avoid concurrent access on thrift client.
Don't wrap RuntimeException in RuntimeException
CDK-261: Add Hive partition tests that use metastore.
CDK-261: Test failing case from CDK-261, passing.

This adds the test case dateFormat("timestamp", "day", "yyyyMMdd"),
which was failing for an unknown reason it CDK-261. This doesn't
reproduce the problem, which may have been fixed in the mean time.
CDK-371: Update delete docs and consistency.

This updates the documentation for DatasetRepository#delete to be
explicit that both data and metadata will be removed. It also clarifies
the ambiguity between returning false and throwing
DatasetNotFoundException. Returning false is correct (enforced by
testing) so the docs now reflect this and HBase has been updated to only
return false rather than throwing an exception.
CDK-370: Add compatibility checks to HBase.