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.
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.
Avoid multiple enumerations of armaments in AttackBase.

- Avoid enumerating the collection more than once in a method as it is not trivial.
Make repair animation pause if player has no money.

use anim.Paused

removed the using line
Fixes to StreamExts.

- Almost all calls to Stream.Read were broken. These have been patched to all go through ReadBytes which itself has been fixed to function correctly. The key thing to note is that Stream.Read is very much allowed to return less than the requested number of bytes. If this happens and you're not checking the return result, you'll be working with partially initialized arrays and really bad stuff happens when you do that.
- Call CopyTo rather than copying between streams manually.
- Peek and ReadUInt8 have been changed to avoid a pointless array allocation which is significant overhead for such simple calls.
Refactor AutoTarget scan and GPS interaction, and cache trait lookup for a slight performance boost
Adds/reworks some minibibs
Fix arch package building on Travis.
Merge pull request #5569 from pchote/arch-packaging

Fix arch packaging.
Fix pacman installation.
Merge pull request #5570 from pchote/arch-packaging

Fix arch packaging (attempt two).
never spawn with density 0 because that is not rendered
Merge pull request #5571 from Mailaender/invisible-gems

Fixed single resources being spawned at 0 density
move pixel doubling and health bar hotkeys to shared widget

closes #5572
Merge pull request #5573 from Mailaender/replay-hotkeys

Fixed pixel doubling and health bar hotkeys unavailable in spectator mode
Don’t queue rallypoint move if MoveIntoWorld:false. Fixes #5576.
Merge pull request #5577 from pchote/production-fix

Don’t queue rallypoint move if MoveIntoWorld:false.