Board

Added the board. This contains a layout, a mechanism for fetching the layout,
the current turn, utility functions to determine if the board is full or empty,
the ability to make a move.
Board - renames setPostition to move

A player makes a move more that "sets a position" so I renamed the function.

getRowColumn would be a private method, so I have renamed it to follow the
more Pythonesque convention of starting with __
Merge branch 'feature/Board' into develop
Added View

This adds a view which will handle the I/O. It could be replaced for something
with a real GUI.
Added Evaluation

This is a class that runs evaluation on Boards, to determine if there is
a winner or a tie.
Added AI

This is generating the boards for the available moves. All of the boards are
corrupted; I forgot that Python does everything as a reference, so the fetch
which should be a copy of the board's data is the board's data, and each
call to move() updates all of the boards. That is every board is operating
on the same data.
Merge branch 'develop' into feature/AI

Neglected to push Evaluation before I merged that branch with develop, so
it was absent from the AI branch.
Board.fetch() copies layout

Changed the fetch function to copy the board layout, rather than return a
reference, which if changed would change the board's layout without
calling the board directly.
Merge branch 'develop' into feature/AI

Updated the develop branch with a bug fix on the Board's fetch method.
AI features added

Added the first and second move options based on best practices (avoid the
middle edges, they can only win in 2 ways, center and corner spots can win in
3 ways).

Added a findWinner() which will determine if there is a next move that will win.

Added a mustBlock() which will determine if not taking a spot could result  in
a loss.

Started the __selectBestMove() which will determine the state of the game. While
not finished it will sepect a spot based on
1) First or second moves are in a corner or center spot
2) If a win can be had, take it
3) If a must block situation is found, block the spot
4) (not implemented yet) check to see if two moves ahead will require
   multiple blocks, if so, don't choose an option that leads to this.
5) Pick random from the available spots

Adedd the makeMove() which will make a move on the active board based on the
best move available
Added second layer look ahead

The case where a move would allow a player to make a move that causes multiple
blocks is now detected and handled.
Made AI funcitons private

The only public interface necessary for the AI is makeMove(), everything
else has been made private.
Merge branch 'feature/AI' into develop
Added Game

Added the Game class. This sets up the board, determines the player,
monitors turns, and evaluates the game in progress.

Made changes to supporting modules which came about from testing:

Removed the direct access to the turn in board, renamed turn to 'player'
Added some more spaces in the view for improved readability
Added imports and magic line

While testing everything ran iun the REPL and didn't need imports as
they were being cut+pasted. In practice, these will need to import
appropriately.

Added the #!/usr/bin/python magic line used by some things to know
the interpreter for these files is Python.
Main added

Main is the harness that launches a game, that cam be played from the command line.
Merge branch 'release/1.0'

Tic-tac-toe game. This should be unbeatable.