Converted AbstractPlane to use recursive types

Type narrowed the Plane return values of the populate signatures to
return the concrete type, instead of untyped Planes.
APNGFormat$Reader updates provided plane properly

If provided a Plane object, the openPlane method in the APNGFormat
reader should now update it appropriately.
SCIFIOBIFormatReader BufferedImage

The SCIFIOBIFormatReader openPlane method is now implemented to override
and properly return a BufferedImage instead of a byte[].
AWTImageTools constructs BufferedImagePlane properly

When creating a BufferedImagePlane in AWTImageTools, an appropriate
BufferedImage is created to set as the data, instead of allowing the
data to be null.
Corrected improper close() overriding

In the legacy SCIFIOFormatReader, APNGReader and ICSReader, the close()
method was improperly overridden/implemented, and super.close wasn't
being called.

Corrected now to delegate to the super.close method
Implemented close methods in ome.scifio formats

The APNGFormat and FakeFormat nested classes should now properly close
local fields.
SCIFIOReaderWrapper returns multiple plane types

The SCIFIOReaderWrapper should now preserve the plane type of whatever
reader it's wrapping - returning a BufferedImage or byte[] as
appropriate.
Updated AWTImageTools/FormatTools to use Planes

The ome.scifio AWTImageTools openImage method now accepts a Plane
instead of a BufferedImagePlane.

This reflective invocation via FormatTools has been updated
appropriately, as has the delegating loci.formats AWTImageTools.
Added AbstractImageMetadata

Moved implementation from DefaultImageMetadata to AbstractImageMetadata,
to facilitate extension.
CoreMetadataWrapper extends AbstractImageMeta

Instead of extending DefaultImageMetadata, AbstractImageMetadata is a
much more sensible choice.

This also corrects the CoreMetadataWrapper methods, adding missing
implementations and correcting method names (Rgb -> RGB) to properly
match the ImageMetadata Interface.
Removed failing cast from CoreMetadata

The imglib2 AxisTypes were being cast to Axes, which is not a valid
cast.

Fixed by replacing a switch block with if/else's.
Disabled MetadataStore setting in ICSReader

In the delegating ICSReader, setMetadataStore was being called after the
id was already set, which will always fail.

Commented out for now.
Added null checking to ICSFormat key lookups

The hard-coded dynamic value lookup methods in ICSFormat Metadata should
have more robust null checking now.
Corrected ics/ids id parsing in ICSFormat$Parser

The findCompanion method that allows either an .ics or .ids id to be
provided properly update the metadata icsId and idsId fields.
Added scaling to ImageMeta#getThumbSizeX/Y

These methods now behave like the FormatReader getThumbSizeX/Y methods,
where - if 0 - they are dynamically calculated based on the ratio of the
current x,y dimensions and a static constant thumbnail dimension.
Removed unused method from BufferedImageReader

getNativeDataType() is not used in SCIFIO because everything always
returns a Plane, and planes can always getBytes().
Implemented openThumbPlane

Now that thumb size scaling is working in SCIFIO, the openThumbPlane
method has been implemented in the ByteArray and BufferedImage abstract
Reader classes.

This method is now properly invoked in the SCIFIO FormatTools.
AbstractReader#getCurrentFile can return null

Since SCIFIO readers operate on Streams and not String ids, it's not
guaranteed that they will have a reference to a String id right now.
Thus null is a valid return value for getCurrentFile.

This may change with more robust IRandomAccess naming API.
Pushed setId boilerplate to SCIFIOFormatReader

The concrete delegator classes, ICSReader and APNGReader, can now
delegate to their superclass for much of the setId boilerplate.

Previously this logic was being repeated in both classes.
Fixed BufferedImagePlane default data value

When a BufferedImagePlane is constructed without being provided with
BufferedImage data, it now constructs a blank image, instead of trying
to use the AWTImageTools.makeImage method.