Create the interface IInput, allowing other inputs classes to be used

This is useful it reading from a network stream, for example, where more
bytes will be read when the parser requests them.