Running into hardware limitations...

Well, it sort of works. The OptimalPlayer performs a search (not really
breadth-first) and finds a solution, but only if it can be done in less
than 3 moves. Otherwise it generates a run-time exception for heap
overflow. I also pulled out the three enums into separate files, and
made some more minor tweaks to the Gameboard and GameboardCell classes.