Test that enpassant target square is correctly calculated

In addition to the tests adjusted the parsing logic so that the
parsed board maintained BoardStatus information through to the end.
Improve the contract regarding enpassant moves

It should be possible to set the enpassant target square after a
pawn move that generates one (i.e. a double-forward move) without
a capture pawn existing in the surrounding area. Relaxed the
invariant to reflect this.

Also improved the testing of valid enpassant moves in isMoveValid.
It is now much more strict. It essentially takes the place of the
strict constraint enforcement that was in the invariant.
Also test the surface

Verify that the pieces on the surface are correct in the tests
about the enpassant target square for Board.parsePosition.
Improve Board.parsePosition to handle multiple moves

Now the move history parsing can handle more than one move.
The logic that had to be modified centered around how the player-
to-move value was calculated and maintained. Adjusted BoardStatus
to make the new style possible.

Also adjusted the protocol format.
Now the following are valid encodings for a board position:

1) CurrentPosition
2) CurrentPosition PlayerToMove
3) CurrentPosition InitialPosition MoveHistory

For (1), the player to move is set to the default value of white.
For (3), the player to move value is calculated from the move
history that follows the initial position.
Test enpassant capture moves in the move history for parsePosition
Add xiao serialization to Surface
Implement handling of castling info in Board.parsePosition

Refactored parsing of player-to-move and castling info to make
parsePosition simpler.

Position encoding now has the following definition.

  Position = Current [PlayerToMove] [CastlingInfo]
  Position = Current Initial [CastlingInfo] MoveHistory
  Current = Surface
  Initial = Surface
  Surface = one char for each square (c.f. the spec)
  PlayerToMove = 'b' | 'w'
  CastlingInfo = ['K']['Q']['k']['q'] & at least one exists
  MoveHistory = Move+ & moves are an ordered sequence that turns
                Initial into Current
Made the game-specific-info after an initial board required
Make the testing of castling info parsing more exact
Board.parsePosition - Castling moves in the move history

Also fixed a bug in parsing the player to move from the first
move in the move history.
Test parsing of pawn promotion moves