Simplifies IO interface
Rebased commit (sorry):

* Stream impl
* Formatting
* Adds pushThrough etc
* Doc