Improve the contract for Move

Refactored the properties to be free in combination with UFCS.
Greatly enhanced the invariant. It is perhaps a bit overly strict as
it now also validates the shape of the move. Usage will tell.
Added the new invariant to the precondition of the main constructor
(all other constructors inherit as they all forward to it).
Simplified the constructors.
Simplified the castling property calculations.

Also added unit tests for isPiece.