Improve BoardStatus performance

Use the face that a bool automatically converts to a numerical value
to perform bit-manipulation to set values instead of
using a branch instruction.
Add enpassant validation to the invariant for Board

The invariant now checks to ensure that a correct pawn exists
on the appropriate squares when an enpassant target square is defined.

Also now making use of the initialized flag from BoardStatus to
short cut the invariant when the board is in an invalid state.
The value is set to true when a board is parsed successfully.
Make isSurfaceSquare a property
Update the API for Piece

Make the following into properties
 - isPiece
 - isPromotionPiece
 - isBlack
 - isWhite
Cleanup MoveList

Imports that are only used inside the unittests should only be
imported when doing unit testing.