Added alpha beta pruning to the minimax algorithm.

Be careful:
1. Suppose you have root node A. That is, AIs turn or MAX node.
2. Now suppose first child evaluates to the first leaf,
   and returnes Integer.MAX_VALUE/2 which is our assured victory score.
3. Now suppose that second child too evaluates its scores down the tree
   and after pruning, returns Integer.MAX_VALUE
   (lets say it was the first leaf for it in DFS).
   Now according to algorithm, alpha at the second child has been
   assigned Integer.MAX_VALUE. Now it sees that it will at least
   give this value since it is a min node. It also knows that it
   is the best favorable score it can EXPECT from this node since it is
   a min node and if it evaluates further, it will only give a score
   lesser than that. So just stop there and prune. So it is possible
   that this state leads to failure. Now although, it's score is
   Integer.MAX_VALUE/2 (our winning score) you may think, by mistake
   that this state has assured victory, but it does not have assured
   victory, only the first state that set the alpha value to Integer.MAX_VALUE/2
   at the root can gives assured victory.

   Another thing to note is that as soon as Integer.MAX_VALUE/2 (winning
   score) has been found for some state, we don't need to evaluate further.
   So we just break;