Rewrite SyncReport for clarity and performance.

- Drop the impressive but inscrutable dynamically generated code in favour of some plain old code.
- Cache type information so costly reflection need not be performed each time.
- Only capture values from a sync object into an array rather than a dictionary lookup of both names and values for efficiency.
- Throw if the sync attribute is used on a property that cannot be read or that uses index parameters.
Use expressions to generate fast member access code rather than using the slower reflection based methods.
Add MinRange plumbing to attack activities.
Added MoveWithinRange activity for Mobile units.
Use MoveWithinRange for attack activities.

Fixes #2104. Fixes #2923. Fixes #4455.
Only inset range for mobile targets.
Simplify MoveAdjacentTo pathfinding.
Allow support powers to require tech prerequisites.
Fix a typo in ITechTreeElement.
Remove cruft from RA airfield rules.
Merge pull request #5634 from pchote/supportpower-prereqs

Allow support powers to require tech prerequisites.
Merge pull request #5617 from pchote/attack-moveadjacent

Improve unit-attack movement
Merge pull request #5616 from RoosterDragon/syncreport-simplify

Rewrite SyncReport for clarity and performance
Some minor cleanup in TraitDictionary and affected callsites.
Improve trait enumeration speed for All and GetMultiple.

Use a hand-rolled enumerators to avoid the overhead from compiler generated enumerable blocks. This trades terseness for some minor performance gains.
Merge pull request #5635 from RoosterDragon/traits

TraitDictionary cleanup
Remove and sort usings.
Merge pull request #5658 from RoosterDragon/formatting-cleanup

Remove & sort usings
Clean up actor selection in WorldInteractionControllerWidget.
Stylecop BridgeLayer.