Adding support for HTTP/2 binary headers

Motivation:

The HTTP/2 spec does not restrict headers to being String. The current
implementation of the HTTP/2 codec uses Strings as header keys and
values. We should change this so that header keys and values allow
binary values.

Modifications:

Introduced ByteString from okio (with a few minor mods). Added new
BinaryHeaders interface and made Http2Headers extend it. Various changes
throughout the HTTP/2 codec to use the new interface.

Result:

HTTP/2 codec no longer requires string headers.
@Scottmitch  Just thinking about this a bit more to see if I can flesh out the details  ...

1) We make the headers generic... i.e. BinaryHeaders<T extends ByteString>

2) We define a new class HttpByteString which extends ByteString and implements CharSequence

3) Give the BinaryHeaders interface factory methods for creating ByteString instances.  The headers decoder will need this when adding new byte[]  names/values to the headers.

4) Define a case-insensitive version of Http2Headers... e.g. Http2ToHttpHeaders (extends Http2Headers<HttpByteString>).  We might be able give it zero-copy asHttpRequestHeaders()/asHttpResponseHeaders() methods? 

5) New interface Http2HeadersFactory used to construct headers of the appropriate type.

6) Headers decoder will use the Http2HeadersFactory and the BinaryHeaders ByteString factory methods while decoding header name/value pairs.

7) Http2-to-Http code can cast the headers to Http2ToHttpHeaders ... if the wrong type, just throw since it's a configuration error in the pipeline.

WDYT?