Store Minimax results in a tree.

Create a tree to store the score of each state. Simplifies the Minimax
implementation and will help to reuse previous results.
Implement alpha-beta pruning.