Tackle the last of the low hanging fruit for memory allocations in the main game loop.

- Avoid calling string.Split twice in SprintFont.Measure.
- Change ActorsInBox method of ActorMap and ScreenMap to avoid allocating and intermediate list. As a bonus this allows the sequence to be lazily consumed. Also avoid LINQ in these methods.
- In FrozenUnderFog.TickRender, the method exits early if no players are visible so the attempt at lazy generation was not needed.
- Unwrap a LINQ Any call in ClassicProductionQueue.Tick.
- Merge some successive Where calls in ProximityCapturable into single predicates.
Move try-catch during creation of sequences into the function rather than around the lazy initialization.

This fixes an issue with VS breaking on the exception because it thinks it will go unhandled, even though it will be handled.
Make Shift+<Hotkey> queue five units/buildings. Fixes #5544.
Properly save replay even when the game crashes (fixes #5610)
Merge pull request #5731 from RoosterDragon/sequence-initialize-fix

Fix #5452
Merge pull request #5735 from pavlos256/always-save-replay

Properly save replay even when the game crashes (fixes #5610)
Hervaster collects tiberium
Merge pull request #5679 from RoosterDragon/main-loop-alloc

Reduce memory allocation in the main loop
Allow actors to exist in multiple building queues.
Allow production ownership test to be disabled.
Fix production tooltip display.
Allow custom prerequisites to be restricted by race.
Tidy transformation trait/activity.
Pass initial race to husks and transformed actors.
Tidy production traits.
Fix remaining tech tree issues.
Remove some long-dead code.
Allow ProductionQueue to filter by race.
Use Prerequisites: ~disabled for unbuildable actors.
Add HackyAI support for multiple structure queues.