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.