Move things around, again...
Profile before optimization
Optimize
Replace move and canMove by tryToMove

This will avoid repeating computations in whoMovesWith
Refactor unit tests for tryMove
Begin refactoring of tryToMove
Super big optimization of tryToMove!