refactor ai and gamestate
memoize winning positions and minimax
move players (human | computer) into deftypes and interact through protocol