Name and group for GUI objects, refactored/improved buttons

Added name and group for GUI objects, and refactored GUI classes to take
advantage of this
Refactored buttons:
they can now use non-static image
they now store their state information
they now store a clicked state image
the decision on which image to display is done on paint time
they now use the canvas factory