Add an interface for optional components

This interface is only meant as a marker so that the context can
discern between fatal errors and expected ones, e.g. when services
are initialized.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Report non-optional services' failing to initialize

This hopefully addresses the issue that some services should not clutter
the log when failing to initialize (such as SCIFIO's LuraWaveService),
but other services should not fail silently, such as ImageJ2's
LUTService or LegacyService.

From now on, we can mark the former category of services with the
Optional interface and still have helpful information from the log in
case essential services were not initialized (and therefore not added
to the set of available services).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Merge pull request #8 from scijava/optional-components

This branch adds an `Optional` marker interface, which can be implemented by `Service` implementations to indicate that it is OK if they fail to initialize. The only immediate ramification is a slight difference in how we log things: if a service is optional, we merely issue a short warning upon initialization failure, whereas if it is required (i.e., non-optional), then we issue a full warning with stack trace.

The rationale is that most services are "required" and should complain loudly if they fail, but a few (such as SCIFIO's `LuraWaveService` should by more fault-tolerant.