Remove the unused castling flag functions
Removed the invariant

There is no reason to have more than the constructor precondition as
a Move value is never modified once created.
Integrate changes to the API to Move

Remove the data in Move from the public API.
Remove the not-so-useful tests in Move
Some formatting cleanup
Improve the Move invariant

Implement the following rules. Some are the same as before. Some are new.
 - source is a surface square
 - dest is a surface square
 - source is not equal to dest
 - sourcePiece is non-empty
 - destPiece is empty or non-empty
 - if destPiece is non-empty then isCapture is true
 - if isCapture and sourcePiece is black then destPiece is white
 - if isCapture and sourcePiece is white then destPiece is black
 - promotionPiece is empty or non-empty
 - promotionPiece can be non-empty only if sourcePiece is a pawn
 - if promotionPiece is non-empty then isPromotionPiece is true
 - if isPromotionPiece and sourcePiece is black then promotionPiece is black
 - if isPromotionPiece and sourcePiece is white then promotionPiece is white
 - if not empty then promotionPiece has to be a queen, rook, bishop, or knight
   that matches the player making the move (i.e. the player of sourcePiece)
 - if isEnpassantCapture then sourcePiece is a pawn
 - if isEnpassantCapture and sourcePiece is a black pawn then the source is
   in the interval [A2, H8]
 - if isEnpassantCapture and sourcePiece is a white pawn then the source is
   in the interval [A1, H7]
Improve the Move constructor precondition

Use a mixin to clarify precondition intent at the definition site.
Added a description to explain what each precondition test means.
Move constructors for Move to Board

By doing so it is possible to tap into the resources Board has to
validate Move values so that no invalid move is ever created.
Remove dead code
Integrate commit 7e938de1b402256ca6214e41bfa9191abb950acb into MoveList.
Reimplemented the Move constructors

Using various names lets the arguments be more specific. This has the
positive side-effect of requiring less stack usage when creating
the majority of the moves.
Cleanup move.d imports
Integrate move constructor changes in commit 2c7b71a87b6e1857730e19613a68371a1925a19d.

Was able to further reduce the enpassant creation function.
The enpassant target square can be read from the board for the
destination square. Additionally, the source piece does not need
to be provided as it can trivially be calculated from the source
square.
Fixed remaining compile errors
Rank starts at zero
Temporarily disable isMoveValid
These unit tests pass
makeCore unit tests pass
undoCore unit tests pass
Everything is back except parseMove and isMoveValid