Implemented a solver for this puzzle game.

Changed Operation from an enum to an actual class that encapsulates the
operation's symbol and its properties.

Overrode the toString method on GameState and Operation for improved
debugging output, if needed.
Made subpanels for the various buttons and elements inside the
GamePanel. Rejiggered and improved the look and feel of the GUI.

Implemented a solver for arbitrary q-dice puzzles, and integrated it
such that the game will never give you an impossible puzzle.

There now is actually a preferences pane which is displayed by the
preferences button, though it doesn't do anything other than display
static text.

BUG: Undo/Goal/Reset don't display until pressing Roll Again an extra
time. I didn't want to commit until I'd fixed this, but it literally
will not go away.