Hidden class pattern for InputManager

Implements the hidden manager class pattern based on David Setser's
GraphicsManager work. This changes InputManager's visibility so that
View-only methods are only visible to the View and Model-only methods
are only visible to the Model. The advantage of this method over simple
interfaces is that the underlying implementation (which contains both
view and model methods) cannot be directly instantiated.
As mentioned above, I think we should include the enums rather than forward declare them.  Ideally, they'd just be in the same file instead of being in a separate file entirely, but including a common file in our two different interfaces for the hidden classes is probably the best option.