bug fixes + additional tests/benchmarks

- fix reader behavior when reads extend beyond the end of the stream

- fix writer behavior with large, incompressable data blocks

- test/benchmark different data profiles (text, json,
  random/incompressable, constant/supercompressable)
simple BufferedWriter type

- BufferedWriter writes blocks when flushed or MaxBlockSize bytes
  accumulate.

- Add tests and benchmarks corresponding to Writer's.

- Rewrite existing tests to demonstrate buffering misalignment.
  bytes.Reader/.Buffer types have optimizations which help in io.Copy.