Refactor ByteChunk to use Array[Byte] not ByteBuffer.

Previously, ByteChunk was defined as:

  Either[ByteBuffer, StreamT[Future, ByteBuffer]].

This meant that users had to be *very* careful to avoid evaluating
ByteChunks in parallel, since the underlying ByteBuffer's position
fields are mutable and are changed by reads.

The new definition is:

  Either[Array[Byte], StreamT[Future, Array[Byte]]]

While the underlying data is itself mutable, the act of reading the
data will not modify the array. This should remove a whole class of
possible errors, and make it much easier to write correct request
combinators.
Get tests running and passing.
Added more logging to HttpClientXLightweb