Implemented IEquatable<T> to speed up equality comparisons.

Actor, CPos, CVec, WAngle, WPos, WRange, WRot and WVec structs now implement IEquatable<T> which means unboxing/casting costs can be eliminated.

Also simplified the ToString method by concatenating components directly rather than using a format string since the overhead is a bit high for simple cases like this.
Added MinBy, MaxBy, MinByOrDefault and MaxByOrDefault methods and replaced calls of the style OrderBy[Descending]().First[OrDefault]() which is not as performant.
Also implemented on the Bits<T> struct.
Fix thread synchronization problem with Sheet.dirty
Add IReadOnlyList
Cache some dictionary lookups in FrozenUnderFog.Tick.

Since FrozenUnderFog.Tick gets called a lot, these dictionary lookups were actually getting repeated a fair amount. Avoiding the repeated work is a minor performance improvement.
MapCache performance improvements
Remove incriminating evidence from the RA preview image

Addresses Scott's concern about the wrong explosion type on the sub pen.
Fix issues in 'intervention' mission

* Fix an InvalidOperationException due to querying traits on a dead
  actor (fixes #5530)
* remove a gap in the SAM belt that shouldn't be there
Merge pull request #5532 from obrakmann/random-fixes

Random fixes
Slackware 13.37 is way too old for us now
update Debian/Ubuntu and SUSE build dependencies
document Lua 5.1 for Windows
fixed syntax errors
complete the Gentoo dependencies via @cerebrum
/usr/bin/openra needs make install-linux-shortcuts
Check team members' health in Team.Do function
Remove now redundant Actor.IsDead checks from mission scripts
Avoid multiple enumerations of armaments in AttackBase.

- Avoid enumerating the collection more than once in a method as it is not trivial.
pacman does not exist on Ubuntu