Switching to Maybe Move

Making sure that the distinction between the illegal moves (-1,-1) and
(-2,-2) was not important. I was being overly careful.
split game logic and console-based UI
Use the "Maybe Move" version
Type-family-based generalization
deriving Ix
hide best_move' inside where clause

those two will soon need access to the same extra argument, "memo"
memoize polymorphically

an extra "memo" argument is required in order to properly memoize the
polymorphic version of best_moves', because otherwise the recursive call
is interpreted as a function (with a type argument) and therefore
recomputed.
refactor game-specific details to TicTacTop.hs
extract common stuff to Player.hs

This way the AI doesn't have to depend on the particular shape of the
board.
remove unused imports
skip the prime wrappers

define all the functions inside the instance definition
Using defaults to scrap the memo boilerplate
extract AI-related stuff to its own module