Introduce DatasetAccessor
A Dataset implementation backed by HBase.
Store entity as full entity, not stripped of key fields. This avoids a costly merge.
Make AvroUtils.mergeSpecificStringTypes respect fields in key schema.
Support Avro Specific in addition to Generic.
Add ability to get entity names for a table.
Support Maps as composite wrappers.
Handle null unions for composite Daos.
Handle case where there are no field mappings (e.g. for a composite schema).
This large commit removes the concept of a key schema, and encodes the key schema
in the entity schema. Key fields can be added to the schema with a "key" mapping
type. Below is an example:

{
  "type": "record",
  "name": "UserActionsModel",
  "namespace": "com.cloudera.cdk.data.hbase.avro.example",
  "tables": ["cdk_example_user_profiles"],
  "fields": [
    {
      "name": "lastName",
      "type": "string",
      "mapping": { "type": "key", "value": "0" }
    },

    {
      "name": "firstName",
      "type": "string",
      "mapping": { "type": "key", "value": "1" }
    },

    {
      "name": "actions",
      "type": { "type": "map", "values": "string" },
      "mapping": { "type": "keyAsColumn", "value": "actions:" }
    }
  ]
}

Above is an example that has a 2 part key, where the first part is the lastName,
and the second part is the firstName field. The index of the key part is
specified by the value of the mapping type.
Merge branch 'CDK-138-unify-api-combined-entity' into hbase-branch

Conflicts:
	cdk-data/cdk-data-hbase/src/main/java/com/cloudera/cdk/data/hbase/avro/SpecificAvroDao.java
	cdk-data/cdk-data-hbase/src/main/java/com/cloudera/cdk/data/hbase/manager/DefaultSchemaManager.java
	cdk-data/cdk-data-hbase/src/test/java/com/cloudera/cdk/data/hbase/avro/CompositeDaoTest.java