!str #15236 new transformer

This is far from finished, but I need to discuss.

The end goal of this is to provide a powerful, efficient, low level API for custom transformation operations. It is supposed to replace `Transformer`.

So far this is only using the API of the `impl.fusing.Op` (and subsclasses). These will be made more user friendly where needed. We can also consider providing higher level API that is more convenient for certain type of operations.

As first step I'm replacing all existing `Transformer` usage.

I'm currently stuck in `HttpEntity` and we must discuss how to go forward there. @jrudolph @sirthias should be part of that discussion.
`preserveChunks` would have to do what the current implementation of `Chunked.transformDataByte` does: for every chunk, it extracts its data, runs it through the transformer, and then packages the result into a chunk with the same metadata as before. 

It is possible to implement for a transformer but isn't possible for a flow. So, we could as well just decide to remove this feature of preserving chunks (I cannot remember having seen Chunks with extensions) and just implement it for Chunks as

```scala
class Chunked(data: Source[ChunkStreamPart]) {
  def transformDataBytes(flow: Flow[ByteString, ByteString]): Chunked =
    Chunked(data.map(_.data).connect(flow).map(Chunk(_))
}
```