Improve selection functionality in GUI

Add inner class Selection to MandelbrotPanel to handle support for
different ways of doing selections on the fractal.
Add generate button to MandelbrotViewer
Rename listener interface to MandelbrotPanel

Rename ComplexGridPositionListener to MandelbrotPanelListener and the
ComplexGridPositionUpdate method to mousePositionUpdate.  This
interface will be used for additional events such as performed
selections on the MandelbrotPanel, and thus a more generic name should
be used.
Make button states react to selection changes

Show what kind of zooming is possible by enabling or disabling the
zoom buttons based on the type of the selection that has been done.

Change in button state happens whenever the selection is changed and
is implemented by extending the MandelbrotPanelListener interface to
contain the method selectionUpdate(MandelbrotPanel.SelectionState
state), where state indicates the current selection state.