Feature: Input Rebuild

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.