Improve BoardStatus

Added a flag 'initialized' to indicate whether the invariant on Board
should be processed. To avoid allocation when parsing serialized board
positions the following idiom is used. It allows the same board object
to be reused for multiple parsing actions without a new memory
allocation from occuring.

1:    auto b = Board();
2:    ...
3:    if(b.parsePosition("..."))
      {
4:        use the board here
      }

A board object starts off in an invalid state. So it is invalid from
(1) to (3). It is only valid at (4) above. Therefore, the initialized
flag is used to prevent invariant validation from (1) to (3).

Also cleaned up the testing of BoardStatus to improve its quality.
Added more logic to the contracts to convey intent more clearly.