Input handler

Implementing the input handler, fixing unit tests, and performing some
code clean up.

The text plugin is in use, but pulling files remotely requires the
application to be hosted in a web server, so it isn't being used in the
active build yet.