Changed removeActorPosition field in ActorMap into a set.

This is because it's purpose is to be queried via Contains when actors needed to be removed.
Changes to reduce allocations in the main loop.

Targeted some methods that generated allocated a lot of memory in the main game loop:
- Actor.Render - Changed LINQ calls into equivalent loops. No allocation for delegates.
- Animation.Render - Returned an array rather than a yield expression. The array uses less memory than the complier generated enumerable.
- FrozenActor and FrozenUnderFog - Materialize the footprint into an array: The enumerable is not-trivial to evaluate is and evaluated many times inside the Tick function. The memory needed is minimal. Changed LINQ into equivalent loops to prevent delegate allocation. Should result in overall much faster calls.
- Widget.GetEventBounds - Changed LINQ calls into equivalent loops.
- MobileInfo.CanEnterCell - Changed LINQ calls into equivalent loops. Don't materialize list of blocking actors every time, instead enumerate them and only when they need to be checked.
- FrozenUnderFog.TickRender - Generate the renderables lazily and also remove a no-op Select call.
General uncontroversial cleanup:

- Made private methods static where possible (runtime can elide checking the object for null).
- Declared attribute classes as sealed (allows reflection on attributes to complete faster).
- Moved some static cctor's into field initializers (static cctor's are slower than static field initializers).
- Made classes static if they contained only static methods (can't create instances of useless objects).
- Use inferable Exts.Lazy and not new Lazy<T>().
- Added required STAThread attribute to CrashDialog.
- Removed unused parameters in private methods.
- Added Serializable attribute to exceptions.
- Added parameter name in calls to ArgumentNullException.
- Use of as operator instead of is + cast.
- Changed (x as Foo).Bar anti-pattern into ((Foo)x).Bar. Results in sensible cast exceptions on error rather than null dereferences.
- Removed unused method in NullShader.
New Maps

-Added Updated/Balanced version of Doubles
-Added "Singles," 1v1 version of Doubles
-Added "Synergy," 3v3 Ground, Naval, and Air
fixed a tib tree in Rogue States + polish
Add port of scg04wa mission
Add port of scg04wb mission
make sure replays is always initialized

fixes #5431
Fixes camo box desert art.

Removes swimming pixel effect and bogus remap pixels. Closes #4796.
Tweaks aircraft selection box bounds.

Closes #5208.
Merge pull request #5435 from reaperrr/ra-polish

Fixed RA camo pillbox desert art and aircraft selection boxes
Merge pull request #5433 from RoosterDragon/main-loop-alloc

Reduce memory allocations in the main loop.
Merge pull request #5404 from RoosterDragon/remove-as-hashset

Changed removeActorPosition field in ActorMap into a set.
Merge pull request #5432 from Mailaender/replay-filter-nre

Fixed NullReferenceException when there are no replays
Merge pull request #5411 from RoosterDragon/general-clean

General Cleanup
Map fixes

-Fixed/balanced "Man to Man" 1v1 map.
-Made minor alterations to "Singles" 1v1 map.
Revert "Move cnc perf graph out of the way of the news button"

This reverts commit 8fc387065671eb370df72d8ebb5929656f9609a2.
fix frozen actors not visible under fog
Merge pull request #5441 from ScottNZ/news

Closes #5438
Merge pull request #5442 from Mailaender/frozen-actor-regression

Fixed frozen actors not visible under fog