Configurable encoding & buffer length.

Writers can now have an encoding, making it easier to convert strings to buffers
before writing. You can likewise configure the size of the internal buffers used
by readers and writers.

In a future commit, I think I need to change the behavior when the write buffer
overflows. I think returning null from read is okay for reading, but returning
null from write is awkward because it forces the client to save the rejected
input while the writer is flushed, and then subsequently re-write it.

I could have the writer stash the overflow (a single overflow buffer)
automatically and then clients would not need stash it. Alternatively the writer
could stash arbitrary amounts of overflow, and then clients need only observe
the return value of write as an advisory.