Commit that adds support for defining PartitionStrategies and ColumnMapping definitions
external to the Avro schema for use in the HBase module.

A PartitionStrategy can now be defined using Json notation defined using a list of
Json objects representing FieldPartitioners. An example is:

[
  { "type": "identity", "field": "id" },
  { "type": "year", "field": "created" },
  { "type": "month", "field": "created" },
  { "type": "day", "field": "created" }
]

This definition can be embedded in the header of the Avro Schema itself, using
a key of "partitionStrategy". For example:

{
  "type": "record",
  "name": "TestGenericEntity",
  "namespace": "org.kitesdk.data.hbase.avro.entities",

  "partitionStrategy": [
    { "type": "identity", "sourceName": "part1" },
    { "type": "identity", "sourceName": "part2" }
  ],
  ...
}

The definition also can be in a separate file and provided to the DatasetDescriptor
builder. The CreateDatasetMojo has been updated to accept a PartitionStrategy file
when using the Kite maven plugin to create a dataset. This implementation addresses
https://issues.cloudera.org/browse/CDK-342 and https://issues.cloudera.org/browse/CDK-344

When using an identity field partitioner for a field, one can specify the KEY
mapping type on the field itself. This will enable an optimization where the
value is not stored in a column, but is populated from the key itself. This solves
https://issues.cloudera.org/browse/CDK-367

If a PartitionStrategy is provided from an external source when creating a dataset,
that overrides a PartitionStategy defined in the Avro schema. A PartitionStrategy
can still be defined by using Key column mapping annotations in the old style as
well. The ability to provide external PartitionStrategies that override those defined
on the schema itself enable us to define multiple partition strategies:
https://issues.cloudera.org/browse/CDK-303

A new ColumnMapingDescriptor type has been created in this commit that defines
how fields in the Avro schema map to columns in an HBase table. A
ColumnMappingDescriptor can be defined with JSON like a PartitionStrategy. An
example is:

[
  { "source": "field1", "type": "column", "value": "cf:field1" },
  { "source": "field2", "type": "counter", "value": "cf:field2" },
  { "source": "field3", "type": "keyAsColumn", "value": "kac:" },
  { "source": "field4", "type": "occVersion" }
]

The ColumnMappingDescriptor file can be provided to the DatasetDescriptor builder
as well. It can also be embedded in the header of the Avro Schema using the key
"mapping". For example:

{
  "type": "record",
  "name": "TestGenericEntity",
  "namespace": "org.kitesdk.data.hbase.avro.entities",

  "mapping": [
    { "source": "field1", "type": "column", "value": "cf:field1" },
    { "source": "field2", "type": "column", "value": "cf:field2" }
  ],
  ...
}

A ColumnMappingDescriptor provided from an external source when creating a dataset
overrides a ColumnMappingDescriptor that's defined in the Avro schema. One can
still define column mappings on the fields themselves using the mapping
annotations in the old stye. The ColumnMappingDescriptor implementation solves
https://issues.cloudera.org/browse/CDK-382