First sketch of extracted map/reduce operations

Problem with Reduce is that currently it's bound to batch and operates on Stream, but not Composable, which makes it all a bit more difficult to compose.

Is it possible to (maybe) move all stream operations (`map`, `reduce`, `filter`, which are currently on `Composable`) to `Stream`, this way `Composable` will hold the event routing logic and `Stream` will be a powerful entrypoint for all stream operations. 

Please share your thoughts, it's a very critical point for us to solve that problem. Of course we can roll out everything in our private infrastructure, but we don't really want to build project based on hacks. Also we believe that our use-case is quite general for stream processing, and many people would try to repeat what we're trying to do now: to create custom streams that work with window operations, listen to several upstreams and so on.

Things like `batch` and `collect` can be moved to their own classes and reused, too. Also, this kind of "convention" brings consistency and maintains spirit of `Tap`, which stores the last value, except for Tap doesn't have to have a downstream, so is a bit different in terms of implementation.

Hope that could be helpful for Reactor project too!