Add an interactive command base class for e.g. B&C

The base class listens for changes to the active display, and keeps
linked parameters in sync with those changes.

The input harvester will also special-case this sort of command to use a
floating (non-modal) dialog box instead of a blocking (modal) one.
Make interactive commands non-modal
BrightnessContrast: extend InteractiveCommand
Make mutable modules into first class citizens

Previously, the API was specific to the DefaultModule, DefaultModuleInfo
and DefaultModuleItem classes, and not defined in any interfaces.

This made it more difficult to deal with Java single inheritance, since
anything wishing to provide the module mutation methods *must* extend
the DefaultModule* classes.
DynamicCommand: register event handlers properly

The recent refactoring to make registration of event handlers more
automatic unfortunately left out DynamicCommands, which do not extend
ContextCommand.

We add an EventUtils convenience class to minimize the repetition (which
is necessary because Java only supports single inheritance).
Add a CommandUtils class to avoid repeated code

This is very similar to the recently added EventUtils. Both of these
classes merely delegate to the respective service of a given context...
but only if such a service exists.
AbstractImageDisplayViewer: fix NPE

This change makes the PanZoomEvent handler consistent with the other
event handlers, and avoids an NPE when the associated display is null.
Make SwingDialog#show work with non-modal dialogs

JOptionPane#showDialog does not return an Integer in the
case of a non-modal dialog; instead it returns a String:
JOptionPane#UNINITIALIZED_VALUE.

We now return our own integer constant, NON_MODAL, in that case.
And in other non-Integer cases, we return another new constant: UNKNOWN.
AbstractInputHarvester: extend AbstractContextual

Input harvesters are contextual, and the abstract base class had no
other superclass, so we might as well use the contextual base class to
reduce boilerplate code.
SwingInputHarvester: tweak style