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
Not sure I'm convinced we need `Close` - why can't we just document / isn't it obvious that if you were discarding the buffered writer you should perform one last flush?

I'm suggesting this because, if we didn't expose `Close` than we wouldn't need to proxy the `Write` or `Flush` methods (i.e. a bunch of code just disappears).

I'm assuming this was done to mirror some standard lib API?