Improve the contract regarding enpassant moves

It should be possible to set the enpassant target square after a
pawn move that generates one (i.e. a double-forward move) without
a capture pawn existing in the surrounding area. Relaxed the
invariant to reflect this.

Also improved the testing of valid enpassant moves in isMoveValid.
It is now much more strict. It essentially takes the place of the
strict constraint enforcement that was in the invariant.