CDK-456: Added PartitionStrategy to Constraints.

This adds a PartitionStrategy to Constraints and updates its
EntityPredicate and KeyPredicate classes. The entity and key predicates
can now use the partition strategy to prepare the constraints in the
constructor so they can be applied quickly, rather than looking up
constraints for schema or partition fields each call to apply.

This also updates utility methods in SchemaUtil to work with a partition
strategy. It now has code to get a schema for fields in a partiiton
strategy and to build a key schema, which is needed by the CLI and the
HBase implementation.
CDK-456: Update AvroKeySchema to use SchemaUtil#keySchema.
CDK-456: Fix assumption in HBase avro util and tests.

The tests previously assumed that the key schema field names matched the
original field names. Now that the key fields are created based on the
partition strategy, this isn't possible because the source fields can be
used multiple times. The fix is to look up the correct source field name
using the partition strategy.

This also fixes tests that assumed the names matched by adding the
matching names explicitly in the partition strategy. This is allowed for
HBase, but was broken because FieldPartitioner itself enforced that
source and partition names had to be different. This removes that
restriction and adds a test to make sure it is properly enforced for
Hive tables (non-Hive HDFS produces a warning). The enforcement was
already implemented in the Compatibility class, it just wasn't used
because FieldPartitioner was doing it.
CDK-456: Fix review items.

* Removed partition strategy arg from toKeyRanges, alignedWithBoundaries
* Added @throws to javadoc for missing partition strategy
* Made predicate combination more thorough
* Added notes about source and partition name collisions