Benchmarks and fixes

Thanks for writing the package.

I added some additional benchmarks, and expanded the write-then-read test. This exposed some bugs, short reads from the Reader and large blocks emitted by the Writer.
So there are not enough bytes in the buffer to fill b completely, so `r.nextFrame()` was called. That's what puts execution in this branch of the code.

But, if there are no more frames, io.EOF is returned by nextFrame there may be bytes left in the buffer. Who knows? My change makes sure the buffer is emptied after it sees io.EOF.

I wouldn't really call this as 'edge case'. The caller is asking for more bytes than are remaining from the last block. IIRC, this came out of the JSON test, the one real case I added (out of 3).