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().