Implement PortReader and ChanWriter

Hi, first pull request here so let me know if I've missed any of the procedure.