Increase code re-use in the A.I.

There is a new method which provides a generic 'interface' for a lot of
the functionality that was procedurally and manually implemented before.

The various game boxes and their combinations have been move to
data-structures which can be easily iterated and checked for potential
moves.

Closes #4.