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.
std::function doesn't compile on Windows without "#include <function>".