Reorganizing of classes

In an attempt to make things a bit more organized, I've made separate
classes for the supergame (the main, top-level game) and the subgames.
GameState has been updated to reflect these changes, and a very basic
"add piece" method added. I forgot Ryan's bots would be needing to look
around at the board a bit, so that side of things is pretty messy for
now. The changes I've made to GameBot are just to get it working with
the new methods and classes, so it's still essentially the same as
before.

The idea is the player classes will only interact with GameState, so it
acts as a bit of a gatekeeper and keeps the dependencies in line.
SuperGame depends on SubGame, which is independent of SuperGame. Pretty
much everything uses GameRules, which is independant of the other
classes.

---

Note: Some of the methods are somewhat redundant because I wasn't sure
which ones would be more useful (and I think it might make the code in
other classes a bit easier to read. e.g. instead of getting the whole
array to change an element, there's a method to directly change the
element you need). I've explained everything as well as I can in the
comments.