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
Oh, actually, here's a short continuation on that thought. The zero valued struct as a writer is "forever closed". It doesn't panic but you can't successfully write anything to it, flush it, or close it.

I'd need to make some changes to support this. But, this doesn't sound unreasonable to me. Consider the rhetorical question, "You didn't specified an underlying writer (you can't in a struct literal), why would you expect it to write stuff?"

If a method like [Reset](http://godoc.org/compress/gzip#Writer.Reset) of "compress/gzip" is added in the future that it could be used to swap (or initially set) the io.Writer implementation and bootstrap a value initialized via a struct literal.


Any thoughts these this comment or the above?