Keymap: swap modifiers keys via context menu

When the user right clicks on a modifier key pop up a menu listing the
available modifiers. When the user selects a modifier from the menu swap
the key with the selected modifier. This provides an alternative way to swap
modifier keys other than drag&drop that works for just modifier keys.
No longer need to check for this here
Some small style fixes
Return early if dragging, unindent the rest
Swap buttons with primary mouse button instead of secondary
KeymapListItem comment and style fixes
Keymap: Backward loop count optimization
Keymap: activate popup for all modifiers

not just those that have a modifier key mapped to them already

Also check for control+click == RMB
Keymap: Allow you to unset modifier keys

Selecting the marked menu item will unset the mapping for that modifier.

We can't rely on there being a unique mapping for a key (more than one
could be set to 0 aka unset) so we have to set the menu item names based
on the interface defs constants intead.
keymap: limit set of left/right swap options

For Shift, Control, Option, and Command assume that you want to shift
on the same side, left-for-left, right-for-right. The Menu key is
available on either the left or right side, and lock keys can be
swapped with any other modifier left or right.

If we have multiple unmapped modifiers we need to do a little extra
work to figure out which of the unmapped modifiers to swap with.

Convert private class member methods to static functions.

Also update copyright info