!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.
What I want to motivate with this PR is a long overdue discussion about what we want our primary outside APIs to look like. The things that will end up on charts and tutorials all over the place and which will be the "face" of akka-http that people will have to get used to and hopefully grow fond of.
The decisions surrounding this API should *not* be driven by implementation details.
So, while I agree with your general "composition over inheritance" stance and the dislike for the `DelegateFlow` / `DelegateSource` vehicles here, I'd like to focus the discussion first on the things that should be driving everything else: the outside API.

And IMHO something like `key: Key { type MaterializedKey = Future[ServerBinding] }` should definitely NOT be outside API. Would we really want to see that on a slide somewhere?
Not only that I wouldn't make it a `val`, I wouldn't even want to see it anywhere in the type at all:

```scala
trait HttpBinding {
  def source: Source[IncomingConnection]
  def localAddress: InetSocketAddress
  def unbind(map: MaterializedMap): Future[Unit]
}
```

The `unbind` is also something that leaves things to be desired. As a user I'd expect the future to complete when the unbind *has happened*. Cancelling the connection stream doesn't allow me to get that notification, so there is value in providing a dedicated unbinding facility. Unfortunately this has to be carried across all the layers.