Fix #67: BufferedStream returns unicode string.

This is a simple case of using a unicode string to join where we
should be using a bytes string.
Fix seeking to anything except 0 with BufferedStream.

Previously, given a non-zero location to seek to, we would always
seek to the start of the second buffered chunk.
Fix seeking to the end of the buffered data in BufferedStream.

Previously, you could only seek to the final character, and not the
current end of the buffered data.
Add tests for BufferedStream.