Base-16 values are easier to parse with move construction
Simplify Move again

Replacing the Move structure with a simple alias to the basic
data type (currently ushort). Also using a new encoding that
should retain only the information that cannot be recalculated
from a board position (i.e. source square, destination square,
and promotion piece).
Update make and undo to use the new Move
Add a one-bit bitboard constructor
Clean up move validity
Move the Move constructors to move.d, and simplify
Use the new Move constructors
Base-16 values are easier to parse for move construction
Update the movegen test values
Fix compilation errors
Implement the move type test properties
Fix the piece tests
Fix a set of tests in MoveList
Change how the promotion piece is encoded in Move

Now the EmptyPiece (indicating there is no promotion piece) is
mapped to zero. This makes the base-16 move values easier to read
for a human.
Started testing of isMoveValid

Generalized the functionality of the extra space in Move. Now using
it to encode various pieces of information, including whether a
move is an enpassant capture move. Using a heuristic was possible
to determine that information but was non-performant.
Use the isEnpassantCaptureMove idiom in move validation
Test that an enpassant capture move has the correct source piece
Combine tests
Finish the enpassant capture move isMoveValid tests
Test isMoveValid against castling moves