Started implementing input context and manager classes.

These classes are meant to improve abstraction of input. With them, it should be possible to retain 100% convenience of using the keyboard, while being able to fine-tune input layouts for other input methods(e.g. gamepad). They also make configuration easier, by adding the ability to easily add new input events by specifying a string name.

TODO:
- Key-combos(with keys reserved for combos, e.g. 'a)
- Multiple keys assigned to one action(alternatives rather than combos)
- System to reconfigure keys for the "current context" in-game(e.g. hit a special key in overmap view, get to redefine keys related to navigating overmap, can also serve as "help")
Improvements to new input classes.

- Separated out registering input from getting a key description.
- The help text on the bottom right of the map screen now prints the actually configured keys, rather than the previous hardcoded ones.
Renamed input_instance to input_event
Refactored input_event definition.

Instead of having separate data structures for gamepad and keyboard, use the same structures and assume that both gamepad keys and keyboard keys will fit into a `long`.

Key sequences are loaded from JSON now(but not handled).
Allow multiple alternative keybindings for an action.

In JSON this is implemented simply by allowing several definitions of the same action. That way, you can freely intermix keyboard and gamepad events without hassle.
Implemented special keycodes.
Added a context-specific help menu for input_context
Polish of the input abstraction classes.

- There are now input categories, if no binding is found in the context's category, the "default" one will be used instead.
- Changed JSON file syntax, the different bindings are now in a sub-array of the action JSON object
- Properly configured all overmap key bindings to be the same as before.
Implemented gamepad support.

Only one gamepad at a time. Still has some rough edges.
Implemented d-pad diagonals and continuous movement.