Separate BufferStream and Stream

This patch separates concepts of Stream and Buffer Stream, since
they can co-exist independently.

Thinking behind that is that Window operations, such as batching
on Stream can be implemented in terms of Actions, without Buffer.
Since Buffer Stream introduces a concept of IterableChildStream,
it was kept unchanged.

Further development of idea may possibly lead to completely
state-free Streams, where only Actions that do batching know the
state, although that may possibly contradict to the idea of Promise,
that currently relies on that.