Move events no longer use redundant coordinates

Changed the format of move events so that events with multiple moves no
longer need to repeat the destination as the next source. This means that
"move 3,1 3,3 3,3 5,3" is now "move 3,1 3,3 5,3".

Updated other stuff to reflect this change and made some extra improvements.

EventFactory:
- Changed parsing of move events.
MoveEvent:
- Changed toString to use the new format.
- Invalid null arguments now cause IllegalArgumentExceptions instead of
  NullPointerExceptions.
- getMoves returns an unmodifiable list.
- Added commenting.
Move:
- Invalid null arguments now cause IllegalArgumentExceptions instead of
  NullPointerExceptions.
- Overrides equals and hashCode.
Updated tests according to these changes:
- Added MoveTest
- Added MoveEventTest
- Changed EventFactoryTest to perform additional tests when parsing a move
  event with multiple moves.
- Changed scenario sim_data/test06 to use the new format for multi-moves.
Added strict feature to ComparingEventListener

ComparingEventListener only checked that incoming events were of the expected
type. Now the test can optionally check for object equality by turning on
strict checking.
This feature of course requires that events have a suitable equals method.

ComparingEventListener
- Added an argument to the constructor for controlling the strict feature.
- Updated ComparingEventListenerTest accordingly.

MoveEvent and RegisterPlayerEvent
- Overrides equals and hashCode.
- Added/updated test cases.