Refactored ImgOpener/Saver

* Added an ImgOptions class which wraps a variety of configuration
  choices for ImgOpener (which has been reorganized to use these
  options).
* Added constructors to ImgSaver so it can create its own Context if one
  is not provided.
* Extracted static methods to a new IO utility class.
Moved io.scif.io.img to io.scif.img

The repeated io package was very confusing and unnecessary.
Changed ImgType to ImgMode

Instead of specifying a single img type, this setting now allows
combination types to be specified - e.g. if different types should be
used if the image fits in memory or not, both types can now be
specified.
Converted size calculation to use a long

A long was being returned, but the counter variable was an int, which
could lead to overflow.
Added PlaneConverter interface

The PlaneConverter interface converts SCIFIO planes opened by Readers to
ImgLib data objects. This allows for specialized population for
different containers.

Provided default implementations for PlanarAccess and RandomAccess
containers.
Added new ImgOptions options

* ImgType -> ImgMode. Can now specify multi-modes. For example: the
  CELL_PLANAR ImgMode's equalsMode() method will return true for any
  other mode that shares either of the types (e.g. PLANAR or CELL).
* Added PlaneConverter options to provide ImgOpener with custom PlaneConverter
  implementations.
Restored NativeType reference in some signatures

When a factory isn't provided, the NativeType guarantee is still
necessary.
Refactored Subregion to Interval

Subregion unnecessarily duplicated the Interval class. Converted to just
use Intervals, which should make integration with Imglib easier.
Updated ByteArrayLoader

Uses System.arraycopy instead of manually setting each value. Should be
faster.
Added ArrayDataAccessConverter

Added a specialized converter for populating ArrayImgs.

This required the following supporting changes:

* Converted the typed ArrayLoader implementations to expose their
  conversion methods, which can be leveraged by the
  ArrayDataAccessConverter.
* Updated the PlanarConverter API to take a Reader instead of a
  Metadata, to allow ArrayLoader instantiation.
ImageMeta size calc uses safeMultiply

AbstractImageMetadata now uses DataTools.safeMultiply for computing
image sizes.
Added ImgFactoryHeuristic option

Created the ImgFactoryHeuristic interface for allowing custom logic when
selecting an ImgFactory. This can be specified in ImgOptions via the
setImgFactoryHeuristic method.

ImgOpener will only use an ImgFactoryHeuristic if a signature without an
ImgFactory is invoked. If no ImgFactoryHeuristic is specified, the
DefaultImgFactoryHeuristic will be used.

DefaultImgFactoryHeuristic is a default implementation that checks a
provided list of ImgModes in order. It uses a 2GB limit for ArrayImg
datasets or PlanarImg planes, and currently provides
SCIFIOCellImgFactories if the dataset doesn't fit in memory.
Converted array loaders to use nio ByteBuffer

Instead of converting each pixel value, the source byte[] is now wrapped
in a ByteBuffer, with a view taken via as*Buffer, and the destination
array is bulk loaded using *Buffer.get().