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