Do not need a ctor for BoardStatus
InitialBoardStatus should be CTFE
Refactored BoardStatus

Now it uses mostly free functions with UFCS.
UCI will be replaced by xiao
Refactored Board

Uses more free functions with UFCS
Fixed an error with canFind()

The function could not match a signature when the constant values were
being used. So I factored them out and am not using compile-time constants.
This is better anyways to reduce the duplication in the two places.
Removed the move shape constraints

They were causing a compile issue when using canFind. It could not
match a signature.

The same issue appeared sometimes when compiling using CTFE arrays.

It was a lot of effort to convert to associative-arrays and try out
an "in" expression.

Backing out the code for now and may bring back later.
Work on an invariant for Board

This commit has more in it than it should. And there are some missing parts
to come. But it is better to organize work up until now on the invariant.

BoardStatus: Removed the InitialBoardStatus value. It was redundant.
Surface: Moved the the Surface serialization to surface.d
Bitboard: Added a bit population count function. It is currently a
placeholder. It is used in the invariant.
Board: Added an Initial and Empty Position value. These are used for the
base case when using parsePosition. Now parsePosition is the standard
way to start using a board as it initializes all values for the invariant.
In particular, it sets the bitboards to match the surface array.
Some demixification in the unit tests. Just to make debugging easier.
Added some more unit tests in Board back in

Fixed a bug in parsePosition.
If a board is reused then its status values were not being reset to
the initial condition.
Fixed more invariant issues
Initial invariant for Board implemented

The invariant and all code paths have been enabled.
This commit also fixes two bugs in MoveList.
 - serialization was incorrectly using %s for move serialization
 - reset() was insufficient. stale values remained and appeared in
   a movegen test.
Refactor MoveList

Use free methods where possible with UFCS.
clear conflicted with object.clear