cleanup
Added parseMove
Added isMoveValid
Implement and randomly test bitcount
Implement rank and file calculators
Improve the invariant for Move

The square of the pawn to take for enpassant moves needs to be on
the board surface.
Remove some mixins in bitboard testing
Work on isMoveValid
improved the contract on ilsb
Express the intent of ilsb better
formatting
Changed the postcondition on Move.this

Added debug information for when an assert failure occurs.
Add move shape testing to isMoveValid - phase 1

This commit implements the core logic of the validation.
Phase 2 will finish the corresponding unit tests.
Add move shape testing to isMoveValid - Phase 2

Finished the unit tests for all pieces.
Each piece is tested for validity by moving from every square to
every other square.
Fixed a bug in isMoveValid

Capture moves were not being validated correctly
Improved *PawnNoncapture

Now the algorithms are branchless
Added testing for double forward pawn moves to isMoveValid

This commit has the positive side effect of also improving the
accuracy of the isMoveValid algorithm in general. Now the difference
between capture and non-capture moves is clearly defined.
It should now be correct in both cases. Before it was focusing
on the non-capture case.
Adjustments to move validation testing

The valid destination boards now are constructed using component
collections. In particular, each sliding ray is separated and they
are combined to define the movements for the sliding pieces.
Improve the testing of isMoveValid

isMoveValid should reject sliding moves that jump over blocking pieces.
Every sliding piece is tested moving to every square on a valid path
jumping over every possible piece acting as a blocker.

A couple of other changes made it into this commit
 - Started using an alias 'Index' instead of size_t for array indexing
   The reason is size_t is signed but indexing should be unsigned.
   This helped with a problem in the looping of the above testing code.
 - Simplified the calculation of the filter board calculation in
   isMoveValid
 - Fixed bugs in the valid destination collection definitions
Add capture testing to isMoveValid