#TODO
- Get the ReadState stuff to a point where it compiles
- Get the test using ReadState and ::send() running smoothly
- Check correctness of ReadState
- Figure out a consistent naming convention
- pull out the sending / receiving functions into a trait (think of good names)
- Build the WrapperBidir struct. determine if you need marker::Sized. implement traits
- Build the WrapperWriter, WrapperReader and WrapperPair that appropriately implement traits
- Implement suitable transitions between the wrappers etc.
- Add some ultility functions
- Create a bunch of tests and comments on the tests to illustrate use cases