Initial data model, API definition and config
Implemented utility methods
Utility method for selecting a random unoccupied square
Methods for determining best move
Method for getting best square after obvious moves.
Raise exceptions for bad requests