TestBinaryMaskOverlay: remove unneeded try/catch

In the same vein as 7c0ea1fda02d4e56793eabfaa5761a8965a0e903, it is
better for tests which are not supposed to throw exceptions to simply
declare those checked exceptions, such that if they *are* thrown, the
test is in error. Then we get the full stack trace instead of just the
message, too.
TestBinaryMaskOverlay: use empty context

We do not need a full-blown context with all available services just to
test the overlay serialization; better to use a minimal (in this case,
empty) one for that.
Main: flesh out javadoc of launch method
NewImage: do not allow 0 axis lengths

The minimum is really 1, not 0.
DefaultMutableModule: tweak javadoc
Add ModuleCommand abstract class

This is another alternative abstract base class for Command
implementations. It is a Command that implements Module directly,
similar to DynamicCommand, but with DynamicCommand's baggage of being a
MutableModule.

The first use case is for OptionsPlugin, which really does *not* need to
be a MutableModule, but *does* need to inspect and mutate its own inputs
and outputs programmatically in its load() and save() methods.

This will allow OptionsPlugins to be used more easily headlessly in
programs like CellProfiler and KNIME, which for practical reasons really
cannot allow DynamicCommands to execute since they do not easily fit
within the fixed workflow paradigms of those systems.

The name "ModuleCommand" is rather unfortunately similar to
"CommandModule" and hence I expect will cause confusion. But I really
could not come up with a more appropriate name. Suggestions welcome.
Clarify and unify javadoc of Command base classes

ContextCommand, DynamicCommand, InteractiveCommand and ModuleCommand are
really the four main choices to extend when creating your own Command.

So let's make their javadocs match a little better, and also explicitly
mention them all in the base Command interface javadoc.
DefaultModuleService: reuse module instances

Specifically, if a module instance is registered with the object service
as the sole instance of a particular type, the createModule(ModuleInfo)
method is now smart enough to figure that out, returning the existing
registered instance rather than creating a new one.

This is particularly useful for modules which are also SingletonPlugins,
which is the plan for OptionsPlugins. In this way, an OptionsPlugin
instance will be repeatedly executable via the ModuleService using its
CommandInfo, without the mess of temporary OptionsPlugin instances.
OverlayService: initialize lazily

This improves the service's initialization time by deferring
construction of data structures until they are actually needed.

It also avoids a circular dependency between the OverlayService and
OptionsOverlay (it is natural for OptionsOverlay to want to have a
reference to its associated OverlayService).
Make OptionsPlugin into a SingletonPlugin

Naturally, this change also makes OptionsService into a SingletonService
that manages them.

All the unused OptionsService methods have been removed; none of them
were useful except for getOptions(Class), which is really the bread and
butter of working with options in a type-safe way.
OptionsChannels: temporarily disable hard saving

Unfortunately, doing this wreaks havoc when ImageJ first starts up,
because the DefaultLegacyService#initialize method tries to sync
everything before the context is fully ready to go.

Future changes to how the LegacyService is initialized (i.e., lazy
initialization) will help address this issue.
Merge branch 'better-options' into context-tweaks

As part of the context injection work, we need the improved and
simplified OptionsService to avoid options-related problems.
Simplify context injection logic in some places

These changes require scijava-common 2.0.1, which strengthens and
clarifies context injection behavior when calling Context#inject(Object)
vs. Contextual#setContext(Context). In particular, accidental double
context injection is now prevented via an IllegalStateException.
Main: flesh out javadoc of launch method
NewImage: do not allow 0 axis lengths

The minimum is really 1, not 0.
Merge branch 'context-tweaks'

This branch improves ImageJ's handling of context injection. It requires
scijava-common 2.0.1, which strengthens the context injection logic,
particularly guarding against accidental double injection.

For details, see:
https://github.com/scijava/scijava-common/commit/91dce968b2a1883e1c79a4b1d58401d7bf3b293d

As part of this branch (on a 'better-options' sub-branch), the
OptionsService was also greatly simplified to use singletons, rather
than creating a new OptionsPlugin instance every time options need to be
adjusted. This is more in line with the design of other plugin types.

For details on better-options, see:
f503d6d41c302c391b34701a4c913f78ea5ba80f