hotkey usability

resolve hotkey conflicts, fixes #2883
add/display existing in-game button hotkeys, fixes #2932
use Mono.Nat for UPnP port forwarding

- might support more devices
- supports internal and external port mapping
- discover the device only once (at startup)
Better UPNP logging. Also fixes a compile error
Center C&C map chooser panel.
Add ScrollPanel.ScrollToItem().
Add random map button to the C&C map chooser.

This also fixes issues relating to RunAfterTick
calls being run out of order - the downside being
that the list remains empty until the iteration
is complete. This will be fixed in a following patch.
Add game-type filter to C&C map chooser.
Polish C&C map chooser layout.
Move threading into the preview generation.
Remove random map button from lobby.
Add map type and author to lobby.
Minor map chooser polish tweaks.
Force the runtime to prioritize the main thread and keep things smooth.
Only render the previews we can actually see.

This really should be fixed generally in ScrollPanelWidget,
but this is the most painful case.
Tweak checkbox and map author label positions.
New spawn selector tooltip for C&C.
Fix C&C options menu fade effect.
Fix viceroid selection group rendering (bug #2930).
make PaletteTexture private and only use it for sprite renders
fixes #2885 forgot to enable the cursor palette before drawing

split HardwarePalette.Update into two functions, closes #2847