don't crash the asset browser when loading sprites with 1 frame

closes #4125
StyleCop
harden asset browser against invalid user input and allow R8

closes #3980
abbreviate the user support folder as in mod.yaml
added a palette chooser and colorpicker dropdown to the browser
fixed index outside bounds of the array when 0 productions left

closes #4137
PaulCop clean
additional checks to avoid giving dead actors a rank sign

closes #4134
.IsDead() includes the .Destroyed check
updated CHANGELOG
Makes TimerWidget LabelWidget-based for better customizability. Sets defaults for LabelWidget in metrics.yaml.
Makes ButtonWidget and Widgets based on it more customizable, sets defaults in metrics.yaml.
Moves defaults for HotkeyEntryWidget to global settings in metrics.yaml.
Moves TextFieldWidget defaults to metrics.yaml.
Disables ButtonWidget contrast default (accidental left-over from testing).
Merge pull request #4140 from ScottNZ/lua-wip

Add map scripting support
Disables cloak sound on camouflaged pillbox. Closes #4154.
Makes desert church garrisonable by Sniper. Closes #4152.
Merge pull request #4160 from reaperrr/desert-church-fix

Makes desert church garrisonable by Sniper.
Sets cloak and uncloak sound defaults to null.