Change modifier translations to use the key name.

This change alters the behavior of pseudokeys in the following ways:
1.) There is now a stateful, static member which tracks the current
modifier map. This can be added to or cleared at any time and is used
solely for translating key names. In the absence of this information,
the k.modifier_X translations are still used.

2.) Before attempting an isValid check (which only checks for
controller presence and mappings, really), make sure the controller
has been initialized. Without this, modifier buttons on the controller
may be inadvertently removed.