Refactored SCIFIO Gateway class

SCIFIO.java now implements the org.scijava.Gateway interface, which
provides conveience methods for creating services, and raises exceptions
when those services are not found.

This allows for consolidation of null Service checking and simplifies
the accessor methods in the SCIFIO class itself.

Also, for consistency the accessor methods were renamed to drop the
plural form (e.g. formats() -> format()).

Note that to take advantage of the Gateway interface, scijava-common was
upgraded to 1.2.0, and pom-scijava to 1.34.
Added MetaTable for image/dataset metadata

Previously, Hashtables were used to track key, value pairs of metadata
at both the Image and Dataset level. These were confusingly named
"ImageMetadata" and "DatasetMetadata".

We have unified the concepts with a single "MetaTable" interface and
default implementation, and a "HasMetaTable" interface which both
ImageMetadata and Metadata implement.

Also the API for interacint with these tables has been simplified.
Updating them now requires a call to getTable() of the appropriate scope
(that is, from an Image or DatasetMetadata object). Then the table can
be manually populated or queried.
Updated logic for axis length generation

In AbstractImageMetadata, the axis length array is now always calculated
on-demand, and leverages the existing getAxisLength logic for each
individual axis to avoid repetition of code.
Refactored Metadata#reset method

Instead of always requiring a Class<?> parameter when resetting,
resetting now implicitly occurs from the most specific class and
recurses up.