WIP Steams typesafe DSL

Only Flow for now. Biggest concern here is naming (of course, see [here](https://github.com/2m/akka/commit/c00fd67df1d557ba2873b59edc7263654be53771#commitcomment-7423015)) and the fact that `HasOpenOutput` and `HasOpenInput` have two typed parameters (see [here](https://github.com/2m/akka/commit/c00fd67df1d557ba2873b59edc7263654be53771#commitcomment-7421351)).

Graph implementation to be done.
Good point. These are like *reduce* operations. After such an operation stream transformations does not make sense anymore. Therefore we can have them as `Output`s. However I see that after a `FoldOut` a user might want to consume the stream as a `Publisher` or as a `Future`. So I was thinking of moving `PublisherOut` and `FutureOut` out of the `Output`s and having them as a materialization step as Viktor PoCed it [here](https://github.com/akka/akka/issues/15633#issuecomment-52307292).