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