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
I'm confident we can find a happy medium.

I feel like any part of an API that can be used, will be used.  Words aren't enough, unfortunately.

I concur with your point that there is no interface in the std lib that covers this case ( and that we shouldn't define it here).

However, there's still the instantiation issue.

I think I agree to returning the struct if we make changes such that a struct literal is usable (maintain a init flag and check on method entry).

But, at that point it makes me wonder if it's even useful to have a `New` method... Thoughts?

Finally, I appreciate your contributions and this thoughtful discussion!