Rewrote Input as a templated class to allow for ease of adding input devices later.