simple BufferedWriter type

```go
func (w *BufferedWriter) Close() error

func (w *BufferedWriter) Flush() error

func (w *BufferedWriter) Write(p []byte) (int, error)
```

- 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.

Closes #3
Re: Documentation. I don't think that applies here. I want the implementation details/guarantees outlined for each implementation (why else would I swap out my snappy-framed encoder). The only savings would be a handful of words (max 1 sentence) per type/method.

Clearly I'm not a man that cares about sparing a handful of words :wink: