Kentzo/ShortcutRecorder — pull request #27 by zoul (2013-10-09 13:28:00+00:00)
Title: Introduce a new class to hold the key shortcuts

The main point of these changes is to have a first-class object for keyboard shortcuts. It makes the interfaces more readable (passing one high-level object instead of a keycode/modifier tuple or a loosely typed dictionary) and provides better code encapsulation and locality (code for working with the keycode/modifier combination is now a part of the class, invisible from the outside). I have also refactored some of the related interfaces to use the new class instead of the keycode/modifier combo.

One serious downside is that the custom class can no longer be stored directly to user defaults. To alleviate this, Ilya suggested that we introduce a `dictionaryValue` property for the `SRRecorderControl` class that could be directly bound to user defaults. I have done that and introduced a new `SRRecorderControlDictionaryValueBinding` constant for the binding. The dictionary serialization used for the `dictionaryValue` is fully compatible with the previous way of storing the shortcuts in a dictionary.

The transformers now expect the new `SRKeyCombo` class instance as an input, but for the sake of backward compatibility they will also accept an `NSDictionary` instance. That means the demo (and other code) should work even with older user defaults contents transparently.