!htp #16162 Upgrade server- and client-side HTTP APIs to "final style"

This PR clears #16162.
It currently builds on #16383, so ignore Björn's commit in your review.

As a temporary measure I have added a stub TCP API as described by #16166. This `TempTcp` stuff will go away when #16166 is cleared.
I guess my desire to include `handleWith` stems from the wish to make the common case as simple as possible and remove potential bumps for everyone coming on board.
You are of course right that `handleWith` is not really required and the API would still enable everything without.
However, let's compare the implementations of an echo server (which will hopefully be on a lot of slides around the world):

```scala
val binding = StreamTcp().bind(interface = "localhost", port = 12345)
for (conn <- binding.connections) {
  conn handleWith Flow[ByteString].map(identity)
}
```

and

```scala
val binding = StreamTcp().bind(interface = "localhost", port = 12345)
for (conn <- binding.connections) {
  conn.flow.join(Flow[ByteString].map(identity)).run()
}
```

For someone who has not worked with stream before and who doesn't know akka-stream,
which one would you say is more readable?
In the context of an echo server, what exactly does `conn.flow` represent?
What does "joining a stream" mean?

Ideally I would even like to get rid of the `Flow[ByteString]` so I could say

```scala
conn.handleWith(_ map identity)
```

but unfortunately this is not readily possible.