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
Hah. Oops. I figured you may have meant that. I made the wrong assumption since it hadn't been merged by the time I read that and commented :frowning:

Definitely take your time reviewing again before merging. Honestly at this point I don't even remember what I'm pull requesting :wink:

Thank you for compromising on this point. I'm sorry it got heated. I do think the API will be more usable as it evolves (which is hopefully very little, but I don't think it's quite finished yet).