Right now the codec supports only IO that has both AsyncRead and AsyncWrite.
I have a situation where the incoming codec != outgoing codec (different messages and I'd like to distinguish).
Ideally, I could use TcpStream::split() then create each half with a codec, but I can't do that because of both traits required.
I'm thinking we should add ReadFramed and WriteFramed to support that.