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
The way I see it, if a zero-valued struct were to work at all there would have to be a way for the user to swap the io.Writer implementation after the value's initialization (it's currently an unexported field). Unfortunately it's not as easy as exporting the io.Writer field because when it changes a new bufio.Writer needs to be created (you'd probably want to detect this and emit a new steamID as well). The one (incomplete) work around would be to check before each write "did my io.Writer change?" by comparing it to an (unexpected) copy of the last known io.Writer. I don't think this works well in practice. You can get runtime panics with incomparable types implementing io.Writer (http://play.golang.org/p/HdjncBedGX). In those cases you cannot detect that something changed because the interface implementation can't even be compared it too itself.

What I describe above would basically be a two-step process for creating a (usable) BufferedWriter using a struct literal. If this were to actually get implemented I think a "New" function is still useful because it is a one-liner and avoids a potential mistake where the user forgets to initialize the io.Writer after creating a struct literal.