!hco #15716: porting http internals to dsl2

Bluntly spoken: I don't care for the details. What I care for is the difference between implementing those two signatures:

```scala
def oneAfterTheOther(a: Seq[String], b: Seq[String): Seq[String]
def oneAfterTheOther(a: Source[String], b: Source[String): Source[String]
```

We need a context (FlowMaterializer) to do the second one but apart from that both implementations should look exactly the same IMO.