Set up a crude interface for hotkey modification
Make hotkeys actually work ingame; duplicates not supported
Added basic detection of duplicate keys
Add OK button
Add remove_key_from_action function to engine
Implement basic duplicate detection. Clean up code
Add button for resetting keybindings to default.
Switch keys on duplicate.

If the user tries to bind a key which already has a binding, instead of simply removing the old binding, I bind the key binded to the current action to the other action. This is done to prevent having an action without a corresponding key, which is currently not supported by the hotkey implementation.
Add confirmation for replacing keys. Add secondary buttons
Bind events to secondary buttons.

The problem is that now major modifications to the apply_changes function must be made, and there are some cases in which it's not very clear what to do.
Add replace_key_for_action to engine.py
Rewrite apply_change to support UNASSIGNED keys
Clean up hotkey_settings.py
Replace UNASSIGNED with - in GUI
Use itervalues with dict
Make pressing Cancel in Confirmation dialog actually cancel rebind
Use ext.Enum for _Action in keyconfig.

This is done to make it possible to get the actions list properly ordered.
Add get_actions_by_name method
Order actions by category in hotkey interface
Add listener for hotkeys window.