C4ObjectList: Add more iterator functionality

This includes a reverse view on the list to iterate over and some utility iterator methods. An iterator now stores a copy of its current object link so that the copy's fields can be adjusted in case of object removal and pending iterations will not skip over some objects which would be the case when advancing the iterator position instead of adjusting the copy's fields.
C4ObjectList: Replace trivial cases of manual list traversal with iterator usage
C4Player: Remove CursorLeft/Right (unused)
C4EditCursor: Instead of manual list traversal use iterator
C4Object: Call Contents.GetLastObject() instead of accessing Last link directly
C4GameObjects: Use this instead of ::Objects
C4Game: Refactor CheckObjectEnumeration to not use manual list traversal
C4GameObjects: When shelving contents of InactiveObjects temporarily, make a copy instead of setting InactiveObjects.First
C4GameObjects: PostLoad sanity Contents check done with iterators instead of direct C4ObjectLink access
C4GameObjects: Sorting out objects with inactive state done with regular Remove/Add calls instead of manually doing linked list dance again
C4Object: ShiftContents done with iterators
C4ObjectList: Move First, Last to protected