Split GUI into separate classes (GraphicalUI namespace).

This introduces a `GraphicalUI` namespace with a `GraphicalUIController` class. This class has a stack of `GraphicalUIConfiguration`s. Each configuration is basically a list of `GraphicalUIPart`s that each contribute to the composed GUI.
The stack in the controller allows for adding new configurations and removing them to get back to the previous state. For example, the tutorial pushes its configuration to the stack, and when the tutorial is over it pops that configuration.