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.