Feature: Input Rebuild (Take 2)

Lots of Input cleanup. It is now broken into a package to make it more maintainable/readable, and Input proper is now the place to register all events.