CDK-177: Adding Key, a complete partition key.

This generalizes Marker so that a Key is a Marker that is complete for a
given PartitionStrategy. Marker is now an abstract class and its builder
returns ImmutableMarker objects that work as before.

Key is a mutable class that allows replacing either a single value or
the entire backing List. However, it is always guraranteed to have the
correct number of values.
CDK-177: Removing additions to PartitionStrategy.

Earlier commits for CDK-177 added keyFor methods to replace
partitionKeyForEntity, but Keys are going to be in the SPI rather than
the API. This means that the Key class defines these methods (through a
Builder) rather than exposing them from PartitionStrategy. This commit
removes the new keyFor(Object) methods and marks newKey as private. It
also removes references to keyFor(Object). keyFor(Marker) remains
because there is no equivalent method to get a PartitionKey; this should
be removed when PartitionKey is replaced.
CDK-177: Adding FieldPartitioner#valueFor(Marker).

This allows the FieldPartitioner to handle extracting values from Marker
objects rather than having another class handle it by querying name,
source name, type, and source type.
CDK-177: Adding Key.Builder class.

Key.Builder creates Keys for a PartitionStrategy, which is given when
instantiating the builder. It provides build(Marker) and build(Object)
methods that replace PartitionStrategy#keyFor.