Add some placeholder GUI stuff.
Center buttons in the toolbar.
Store the board at each node in the game tree.

While this does use an extra 148 bytes per node (potentially around 10KB
extra for a big game/a game with lots of variations), this is the only easy
way to be able to retrieve the board at each node.

Undoing moves would be fiddly and duplicate a lot of logic from perform_move,
while also requiring additional data on each node (the captured piece, if any).

Starting from the start board and performing moves until reaching the
current node would be tricky as you would need to traverse the tree
upwards to figure out the path, as nodes have multiple children. This
would also be quite slow.

This solution is quick and easy, and the memory overhead isn't a big
deal as only one of these game objects should be kicking around anyway.
Add back button functionality.