Change structure of BoardState

Before, I had the implementations of BoardState responsible for placing
the character in the position, but that functionality has been moved to
the Board class.  Board now uses BoardState to validate the move instead
of making the move.
Pass board down to BoardState
Add allows_move? to SecondPlayersTurnState
Change board.try_move to take player.char instead of whole player object
New tests for state implementations
Add update_state method to Board
Test for winners in update_state
Remove try_move methods, implement GameOverState