Fixed small typo

Invaild move vs Invalid Move was shown in Tictactoe when an invalid move
was entered
Fixed negative indices problem

Fixed problem where a move such as (-1, 0) would be accepted as correct
by isValidMove and result in an exception. Added such an error to the
test suite.
Removed use of OverlappingInstances

The consensus of the Haskell community seems to be that
OverlappingInstances is an unsafe extension to use. As such I've manned
up and removed it. This means the nice syntactic sugar of using the
simple show command for showing a GameBoardUnit has been replaced with a
less generic showGameBoardUnit function.
Added new test to test for isValidMove

Added Arbitrary instances of GameBoard and GameUnit (ended up using
newtypes to avoid overlapping instances). These in turn were used to
create a QuickCheck test to make sure that checkFull board being true
implies that isValidMove is false for all moves on that board.
Added commandline-options

Now all of the SuperTictactoe and Tictactoe stuff can be accessed via
the same commandline program. This was done using optparse-applicative
to parse the various flags that are required to get the various variants
in play. Along the way, minor modifications were made in what gets
printed to the screen by functions in Tictactoe.hs and SuperTictactoe.hs
to make things prettier.
Added notes to the README

Added additional notes about how to run the program in the README. In
particular, the various different functions are now accessed within the
same program by different flags.
Removed extraneous files

Due to the move to commandline arguments, AIGame.hs and SuperGame.hs are
no longer necessary.
Added additional documentation on testing

Added additional documentation in README about how to set up things for
testing so that Tests.hs should run without a hitch. Also added a test
directive in the Makefile.