Represents a state of the game
MoveRecord stores information necessary to undo the move.
Outcome stores information about outcome after move.