Improvements: optional Underflow and non-lists

* Allow StreamBuffer to underflow if there are readers and the
  stream is done.
* StreamBuffer can accept a Stream<Foo> or a Stream<List<Foo>>,
  read(5) will still return a single, 5 entry list of Foo.
  Good for non-buffered streams.