Re-implement PortReader in terms of a generic BytesIterReader

Inspired by 

https://github.com/mozilla/rust/pull/10823#issuecomment-30102391