Restructured format and translator discovery

Translators are now discovered independently via a TranslatorService.
There is no longer a mapping between formats and translators, because
the relationship is many to many (e.g. if someone created an APNGtoICS
translator it would have no defined format).
Extracted PluginAttributeService interface

Converted PluginClassService to an interface/default implementation
pattern, as all services should be (to allow multiple implementations,
overriding on priority).
Corrected ICSFormat dataset metadata name

Changed from cMeta, which implies "core metadata", to dMeta, for dataset
metadata.
Updated PrairieReader Location use

Updated for the Context revision.
Always set DatasetMetadata soruce on creation

Ensured that any time DatasetMetadata is created, its source is set if
possible.
NPE in InitializeWriter

Rearranged metadata initialization to avoid a potential NPE in the
InitializeServe.InitializeWriter method.
Removed init method from AbstractReader

Allows dataset metadata to be null on creation, so it can be set when
appropriate (e.g. when setting the Metadata on the reader).
Moved DatasetMetadata name constant to abstract

There was no reason to put the name constant in a concrete
implementation. Moved to abstract layer.
Removed WeakReference value from LegacyAdapters

Legacy adapters were using a weak hash map to map to WeakReference
values.

This was done because the values are wrappers of the keys, so having a
strong reference to the values creates a strong link back to the key, so
they would never be garbage collected.

However, there is no guarantee that the values will ever have a strong
reference to them. Given that the legacy code has no notion of the
wrappers, there would be no reason to have a reference to them.

Thus there must be some strong reference in existence, and so it makes
sense for it to be in these maps. The WeakReferences should be pushed
down to the individual wrappers, so that they wrap their targets
weakly.
Removed anonymous constructors from RAISAdapter

When constructing a RAIS wrapper from the adapter, a RAIS instance must
be provided, as anonymous construction will cause problems with
immediate garbage collection (and thus memory leaks).

Especially given that if the original stream is closed, even if the
wrapper RAIS is not gc'd, there's no way to close it.
Refactored CoreMetadataArrayWrapper -> ListWrapper

As the base currency of CoreMetadata in bio-formats is a List now, the
legacy wrapper should wrap lists instead of arrays.. especially given
that the deprecated method that returned an array would never return the
same object twice, always constructing new arrays, making mapping
impossible.
Refactored scifio-devel to close memory leaks

Refactored scifio-devel classes so that they would avoid dangerous
operations that could lead to memory leaks (e.g. anonymous
RandomAccessInputStream creation, unclosed streams/components, improper
close() method implementation).
Consolidated duplicate getAxisLengths/AxisTypes

The image/dataset Metadata API had duplicated themselves, with
getAxisLengths/Types and getAxesLengths/Types.

These have been consolidated to getAxesLengths/Types, and all
invocations have been updated as appropriate.
LegacyAdapter refactoring to fix memory leaks

The LegacyAdapters have been updated so that each wrapper weakly refers
to its wrapped object.

Thus by using a WeakHashMap whose key is wrapped by the corresponding
value, we create strong references to the values to avoid premature
garbage collection, but avoid adding a strong access path to the key.

This requires that all wrappers be completely lightweight: they
shouldn't open any file handles, etc, as they could be garbage collected
at any time. They must always dynamically compute their return values
using their wrapped objects.
getStream does not always log exceptions

The SCIFIOReaderWrapper getStream was almost always catching and
logging an exception. It now does a more thorough check to find the
input stream if available, and returns null if not, without throwing
an exception (unless there is a legitimate reason now).  # Please
enter the commit message for your changes.

This should help minimize log file sizes.
Updated BF, test-suite build.properties

The bio-formats and test-suite build.properties have been updated to
include scijava-common, sezpoz, imglib2, and the eventbus jar as needed.
Avoid creating channel arrays more than once

DatasetMetadata should now facilitate caching of the channel dimLengths
and dimTypes arrays, so that a new array is only instantiated once for a
give Metadata.
Added TranslatorService.translate method

This is a convenience method that allows for a lookup of an appropriate
translator and immediately invokes Translate on the provided parameters.

Returns true if a translator was found.
OMEMetadata always has a root

Changed the root from an IMetadata to OMEXMLMetadata for easier method
access, and added a constructor to accept an OMEXMLRoot. A root is only
constructed via the service API if one is not provided.

Translators involing OMEMetadata should also ensure the root is
populated now.
Added OMEXML tutorial

New tutorial demonstrating opening a dataset's ome-xml using SCIFIO.