HBASE-8693 Extensible data types API

WIP. This patch introduces an extensible data types API for HBase. It
is inspired by the following systems:

 - PostgreSQL. Postgres has a user-extensible data type API, which has
   been used to great effect by it's user community (ie, PostGIS). The
   desire is for HBase to expose an equally extensible data type API.
   One aspect of the Postgres data type is the ability to provide
   equivalence functions for index operations. This appears to be of
   critical performance utility for its execution engine.
 - Orderly. Orderly handles the issue of compound rowkeys by providing
   convenience classes for handling these kinds of data types. This
   influence is reflected in the Struct and Union family of classes.
 - Phoenix. The PDataType enum used in Phoenix provides type hints,
   similar Postgres's equivalence functions. These appear to be used
   during query execution for numerical type promotion.

This WIP patch is intended to exercise the OrderedBytes API,
particularly around numerical value support. The other intention is to
establish the set of data types HBase should provide out of the box.
This list is becoming quite sizable and includes both the "standard"
types as well as "legacy" types to help developers transition their
existing applications. The final intention of this WIP patch is to
shop around the data types and API for their definition with a wider
audience. It does not address the type compatibility concerns
expressed by Phoenix's PDataType API (ie, isComparableTo,
isCoercibleTo); these will be address in a different JIRA.

Patch TODOs include:
 - better test coverage
 - more javadocs
StructBuilder, isSkippable() API