Fixes to key binding system

For #2523. This makes various changes related to that issue:

* Key repeat is now identified in KeyboardEvent so that it can be ignored if appropriate.
* Descriptions of modified keys are now slightly nicer (needs translations to be updated slightly)
* Modifier keys can be used by key bindings, but cannot themselves have other modifiers applied.
* Left and Right modifier keys are always treated as equivalent when used as modifiers. When they're used directly as bindings (e.g., binding the Right Shift key to Decrease Set Speed), then they are not equivalent.

I'm not totally sure how we want modifier keys to behave with respect to key bindings. As with so many things, we may have to revisit that in the future.