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.
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
rename IEffect.Tick() to TickEffect()

to avoid confusion
use TickRender() for RenderSprites and PaletteModifier
new trait WithMakeAnimation
rename INotifyTransform methods