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.
Merge pull request #37 from canton7/feature/IInput

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