Refactored Formats to ease creation

The TypedFormat interface was removed, along with all generic parameters
in the Format class hierarchy. This was done so that Formats can be
created without requiring all components to be defined beforehand, or
for cases when a component does not need functionality beyond some
default implementation (e.g. the AbstractChecker is sufficient if just
suffix matching is required).

Since classes can't be implemented with an arbitrary number of generic
parameters, new API was added for Formats to delcare their custom
classes. Any component class not found is assumed to be one of a new set
of Default implementations, that simply extend the corresponding
abstract functionality.

Because of the loss of generics, the Format API can no longer guarantee
the concrete return types of its methods. This also affected some
changes in the DefaultFormatService data models. However, type safety
can still be provided by narrowing the return type of these methods in
the concrete Format implementations - if desired. It just can't be
provided in an abstract layer.

Also, some conventions for Formats were being passed through the
constructors (format name and associated suffixes). Because constructors
are not inherited and can not be enforced by the interface, this is
non-intuitive when adding new Formats. To lean more heavily on the
interface, these constructors have been removed, along with the abstract
implementation of these methods - forcing their implementation when
creating a new Format.
Removed unnecessary FakeFormat components

The Checker and Writer implementations were unnecessary in FakeFormat.
They have been removed, reverting to their Default implementations.
Updated scifio-tutorials for new Format API

The tutorials have been updated for the refactored Format API, and
do a better job discussing what's necessary to create a custom Format
using this new API.
Removed CaseInsensitiveLocation

1 of 3 commits to correct the CaseInsensitiveLocation. Currently, git
log --follow does not work, because the components/common was deleted
while simultaneously adding a components/loci-legacy and
components/scifio-devel version, where they should have been split out
over multiple commits.

This has the unfortunate side effect of breaking the build, due to a
lack of loci.common.CaseInsensitiveLocation.
Copied modern CaseInsensitiveLocation

Copied the components/scifio-devel CaseInsensitiveLocation back to the
loci-legacy component. This version has the correct history. So git log
--follow on either version is basically the same.
Restored loci-legacy CaseInsensitiveLocation

Reverted the loci-legacy CaseInsensitiveLocation back to its old state.
It now has the correct git log --follow history, although it is missing
some (non-specific) history between the original breakage and this fix.

Unfortunately, the original mistake could not be corrected as it was
already merged to master.
Added abstract typedParse method

AbstractParser now defines a typedParse method. This functions similar
to the Translator typedTranslate method, allowing post-parsing
operations to occur automatically (e.g. population of ImageMetadata).
wip: remove this when merged to develop

* Updated version to 4.5-SNAPSHOT
* Corrected typo in groupId tag
* Changed dependency from loci-common to loci-legacy (loci-common is an
  empty pom project that exists for backwards compatibility)
* Added scifio-tools to top-level pom.xml so it will be included on
  top-level maven commands and imports.
Fixed NPE when adding axes 1 at a time

If no axes existed, the axis arrays were null - as there was no reason
to construct empty arrays.

This condition is now checked and handled appropriately.
Updated service indexes

All SCIFIO default services are now indexed under the most granular type
possible to enhance searching capabilities.
Fixed LUT usage in AWTImageTools

The ome.scifio AWTImageTools will now properly use LUTs attached to
planes when dealing with indexed images.

To facilitate this, the legacy AWTImageTools now attaches the legacy
reader's lut to the freshly created plane used in delegation.
Enhanced AbstractImageMetadata adding axes

When setting Axes lengths, AbstractImageMetadata will now perform
checking to see if the requested axis is actually present. If not, it
will be added automatically.
Set OMEMetadata source when writing (legacy)

The SCIFIOFormatWriter will now set the source of the OMEMetadata before
translating it to the destination, in case the source is necessary
during translation.

The source is closed to avoid memory leaks.
AVIFormat conversion

The loci.formats AVIReader and AVIWriter have been converted to a single
AVIFormat in ome.scifio.formats.

The legacy classes are new delegators, which pass all functionality to
the SCIFIO implementation.

Supporting classes have been copied to SCIFIO (codecs and the
UnsupportedCompressionException) but will be converted to delegators at
a later date.
Removed populateImageMetadata from abstract layer

The empty implementation of populateImageMetadata has been removed from
AbstractMetadata. This is to encourage its implementation with each new
concrete metadata type. This information must always be known, and its
generation will be different for each format, so there is no reason to
have an empty implementation in the abstract layer.
Added sub-resolution skeleton

SCIFIOFormatReader now has skeleton implementation for the
sub-resolution API methods.

These are not considered supported in SCIFIO at this time, merely added
for runtime safety.
Converted BMPFormat

The loci.formats BMPReader has been converted to an ome.scifio.format:
BMPFormat. The legacy layer now delegates all functionality to SCIFIO.