Buffer limits + fragmenting

Allow the buffer to have an upper limit before pausing the backing stream.
Added test to show piping of multiple streams works.