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
> If a type exists only to implement an interface

I would take that to mean that "a type's exported methods exist only to satisfy a (set of) interfaces". That is basically what you stated in for first comment. The wrinkle I see in that statement is the Go community's ~policy that every change in public packages are backwards compatible (indefinitely). I'm lead to the conclusion that it is the responsibility of the package API designer to ensure that the statement hold true (indefinitely). So my rule of thumb is that a type for which that cannot be promised with some acceptable degree of certainty should be exported.