Allow multiple keys to be bound

Currently only allows keyboard keys to be bound, and doesn't provide a
UI settings interface for binding multiple keys. Feasibility study for
Herzach
Add basic advanced settings window template
Move key handler to a separate class
Use binary settings storage

Allows us to serialize more information than using XML
Update MainWindow to use new key handler
Update settings to store keys as an ObservableCollection

Makes binding to the UI considerably easier
Update UI to allow multiple commands to be bound
Merge remote-tracking branch 'origin/feature/multi_keys' into feature/advancedsettings
Move common logic out of MainWindow

Allows us to share common logical instances across multiple windows,
which makes more sense. Also, will eventually allow us to move more
program logic out of MainWindow - allowing view classes to handle
nothing more than representing data to the user and handling UI events.
Make KeyMonitor, VoiceRecognizer public

Allows them to be used with the core logic class
Tweak AdvancedSettings view

Receives instance of core logic upon initialization, saves settings on
exit.
Pressing Push To Arm again will disarm it

Closes #38
Fix Access Denied in ForegroundProcess (fixes #36)

Makes use of a Vista+ API which provides partial information access to
restricted processes querying elevated ones. Should solve the issue
Alpha-Kilo was experiencing.
Merge remote-tracking branch 'origin/feature/multi_keys' into feature/advancedsettings

Conflicts:
	Articulate/MainWindow.xaml.cs
Switch to advanced settings window
Version bump to v2.2.0
Version change to v0.2.1

Got a bit confused with the versioning numbers...
Merge pull request #37 from Mpstark/feature/multi_keys

Allow Multiple Multi-Key Key-Binds, Advanced Settings