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.
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.
Fix captured tech unlocking in TD.
Introduce Order.SuppressVisualFeedback to cleanly disable flashes.
Use ExtraData for SetStance and SetUnitStance.
Avoid repeated queries of DeveloperMode.
Fix CanBuild not checking DeveloperMode.AllTech.
Propagate race to produced actors.