Reduce number times grid is copied.

Add an undo move function to remove the need to copy the grid when a
move is made.
Remove MinimaxNode and remaining gird copy calls.

Only return the score of the state from minimax, this means that the
scores of the children and grandchildren are no longer displayed. Rely
on Zobrist hash to test if two states are equal, this removes the need
to store the grid in the t-table and the remaining calls to the copy
constructor.
Only check if the last player has won.

The current player cannot win as the current player has not made a move
yet, so only check if the last player has won.