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
So I have developed fairly strong feelings about this. And I've basically reached the point where I can't muster the enthusiasm to debate. It's no longer pragmatic. Here are the ways forward that I see.

- I have somehow finally convinced you that an exported struct type is really the best thing to do and we merge this in :+1: That looks unlikely :frowning:

- I close this pull request and put expanded functionality in my branch alone.

- I implement an interface and we merge it in here, at which point I will break compatibility in my fork and expose the struct (probably along with the Reader and Writer structs). I will try to continue issuing upstream pull requests but I can't promise to do extensive work back-porting anything non-trivial, especially in a timely manner :frowning:

These are ordered by my preference. It's unfortunate but at this point I think one must happen. I don't want my fork to diverge. I'm sorry. I respect you and your work here as well as in other projects like nsq. But I don't think I will fully concede here.

How do you feel about this and do you have any alternatives to propose?