Cleans up the Player type.

Adds a PlayerType ADT to distinguish between Human and AI players,
which simplifies some of the code related to the Player type.
Moves some of the code into different files.

This is mostly in preparation for separating the game logic out
from Main.hs
Adds StateT into the mix.

There is still a lot of cleanup that could be done with respect
to the StateT code, but I'd probably do that after adding RandomT
and WriterT into the mix (although WriterT has problems, it's nice
for learning).

This is at least a start.
Fix some hlint warnings
Fixes some problems from a dodgy conflict resolution.