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.
@nmittler - I think they way values are being inserted into the linked list is causing the order of elements to be backwards. For example the `get(CharSequence)` method from `TextHeaders` says:

>@nmittler - Again not your code but I think this method may not be doing what the comments say:

>Returns the value of a header with the specified name.  If there are
more than one values for the specified name, the first value is returned.

It seems like this is going to be appending the newer values to the head of the bucket?  If this is the case then the *last* (as apposed to the *first* inserted value will be what is obtained.  This seems to be a common theme (or potentially misconception) conveyed by the *first* terminology in the `TextHeaders` and `BinaryHeaders`.  Also there are a bunch of *Collections.reverse(...)* calls which would be unnecessary if we appended (as apposed to prepended) values in this list.  WDYT?