Allow Multiple Multi-Key Key-Binds, Advanced Settings

Wow, writing that title was difficult :smile:

Anyway, what this branch does is add the ability to support a number of multi-key (Shift + Space etc.) keybinds, addressing the issues raised in the BIForums thread.

It also separates the key handling from the UI code, allowing for easier maintenance and fewer merge conflicts as we progress. I've also gone about rewriting much of the handling code to get it as sleek as possible, so maintenance should be a breeze.

## Warning
This branch makes changes to the way settings are stored, switching to a binary data format over XML to allow the serialization of complex keycode data. If being able to edit the settings file manually is an important use case then I will look into changing this back (if possible) to allow XML to be used again.

## Why I'm Opening a Merge Request
I really think this one needs looking at from a "where are we going" point of view. The functionality is great, but it has a rather steep cost in terms of allowing power users the ability to tweak the settings file themselves and encourages complexity over simplicity.

I feel that, if nothing else, this should only be merged once we're ready to implement a separate settings window - as the key-binds list can quickly grow quite large, and doesn't really fit into the UI that well. Ideally I'd like to have that settings flyout behave as a quick tweak page for features a user is likely to access frequently (e.g. confidence margin, if their environment background noise levels require it and possibly Mic gain if we implement it), other less frequently used settings should ideally appear in a new window (working on adding one) which I'd feel happy about cluttering up a bit more with complicated power settings like the command timeout, multiple key-binds etc.