! io: add support for compound write commands (Tcp.CompoundWrite)

Most of this addition only affects the non-public parts of akka-io, however, the `ack` and `wantsAck` methods that were so far defined on the `Tcp.WriteCommand` type have now been moved to the new `Tcp.CompactWriteCommand` type.
= http: add dependency on spray-util, remove duplication
+ http: extend Rendering with `~~%` operator for rendering hex ints and longs
! http: add small extensions to Uri model

Specifically:
- additional `charset` parameter on `Uri.Host.apply` and `Uri.Query.apply`
- new method: Uri.Query::toMap
! http: introduce `HttpData` model replacing the byte array in `HttpBody` and `MessageChunk`, closes #365

So far the HTTP model for message entities and chunks was based on "raw" byte arrays thereby violating the immutability "standard".
 With this change we introduce a dedicated model for HTTP binary data called `HttpData`, which also adds support for file-based (off-memory) data.

 We use the opportunity of this breaking change to refactor the `HttpEntity` model.
 `EmptyEntity` and `HttpBody` are gone and replaced with `HttpEntity.Empty` and `HttpEntity.NonEmpty`.
 Additionally `MessageChunk::bodyAsString` is gone. Use `chunk.data.asString` instead.
! can: upgrade to new HttpEntity / HttpData model

 The breaking change here is the evolution of the `response-size-hint` and `request-size-hint` config settings to `response-header-size-hint` and `request-header-size-hint` respectively (since spray-can now only renders the HTTP message headers into a `Tcp.Write` command and can forward the message entity untouched to the IO layer).
= several: upgrade all other modules and examples to new HttpEntity / HttpData model
+ http: extend and improve new HttpData abstraction
+ httpx: add default marshallers for ByteString and HttpData
+ routing: upgrade `autoChunk` directive, add `autoChunkFileBytes` directive
! routing: have `encodeResponse` automatically tie in `autoChunkFileBytes`

 In order to prevent `encodeResponse` from having to load the complete file content for compression it needs to automatically apply `autoChunkFileBytes` to its inner route. However, since the latter requires an implicit ActorRefFactory (for being able to spawn the chunk streaming actor underneath) we need to refactor `encodeResponse` to a magnet based signature.
 This change trickles down to all depending directives, most importantly `compressResponse`. The "no-paren overload" of `compressResponse` needs to go (since it cannot be magnetized), which opens up the chance to unify `compressResponse` and `compresseResponseWith`.
 For symmetry we also change `decompressRequest` accordingly.
= routing: upgrade FileAndResourceDirectives, also fixes #412 and #413
= routing: reduce defaults for `file-chunking-threshold-size` and `file-chunking-chunk-size` to 128k
! routing: fix `getFromDirectory` and `getFromResourceDirectory` not working properly for URIs with encoded chars

Previously the unmatched path of the request context was directly used for retrieving the file/resource content. If the path contains non-token chars that need to be encoded this results in file system/resource accesses to something like `foo%20bar.txt` instead of `foo bar.txt`. This patch fixes this problem.

The "breakingness" of this patch results from marking two internal methods private that were previously (and erroneously) public.
Merge pull request #478 from spray/wip/file-based-http-data

Introduce new `HttpData` / `HttpEntity` model and other improvements