changed the error when there's an incomplete write to the ring buffer
added tests to make sure this thing works as expected
changed buffered pipe behavior to block on write until all the bytes are written to the buffer.  this means longer waits if the buffer fills up, but io.Copy will work as expected