Separate out a board class

Initially it felt like the board was just an array of spaces and all of
the logic could happen elsewhere. After further inspecting it makes more
sense to have the board inspecting itself instead of splitting tasks
between the 'Game' and 'Computer' class.

currently I feel that the board should complete the following tasks:
  * generate a new board
  * check the spots on the board for a match
  * return spots matching the requested parameters
  * detecting if there is a win or a draw
  * detecting if a move on the board is valid
  * placing a move on the board