AWTImageTools: factor out XYCTuple

The XYCTuple nested class has been factored out to a standalone class. This
allows external code to use XYCTuples to set up indices for AWTImageTools
methods if needed.
BufferedImagePlane: cache byte array

BufferedImagePlanes will now return a consistent byte array object for
multiple getBytes calls, for a given BufferedImage object. This allows
modification of the associated byte array by reference.

Updated the Plane.getBytes javadoc to declare this guarantee.
FormatService: add getOutputFormats method

Added a method, and default implementation, to obtain a list of all
discovered Formats with a valid Writer implementation.

This is useful for determining which formats can be written to, e.g. for
a file chooser.
FormatTools: add nextPlaneIndex methods

Added a set of N-D convenience methods. This method takes an arbitrary
length position array and gets the next valid plane index, per
positionToRaster, if it exists. It also updates the position array by
reference, and resets indices to min values when appropriate.

This method can be used to avoid recursive descent when iterating over
an arbitrary number of dimensions. It can handle cropping, but not
arbitrary indices in a range.
FormatTools: style cleanup

Applied the style template to FormatTools.
New class: AsciiImage

Transferred the AsciiImage utility class. This class can be used to
print ascii representations of a dataset, which is useful for headless
systems.
AWTImageTools: add openImage signature

Added an openImage signature that doesn't require a long[] to be
explicitly passed. This is simply a convenience method. The planar axis
lengths of the Metadata attached to the given Reader are used.
Add ImageViewer classes

Ported the Bio-Formats ImageViewer to SCIFIO. Also included are the
PreviewPane, ComboFileFilter, FormatFileFilter and a GUIService
(formerly GUITools) that are used in the ImageViewer and related
classes.

The original ImageViewer was built as a basic app for opening and saving
images. This functionality has been restricted by removing the menu bar,
so commands can be invoked programmatically only.

The primary purpose of this class right now is to provide basic viewing
functionality, e.g. for command line tools.

Use of ImageViewer outside of command line tools is not explicitly
guaranteed right now. The entire philosophy of maintaining our own
viewer is currently up for debate - an alternative being simply using
IJ2.
AWTImageTools: add openImage(..byte[]..) signature

Added another openImage signature that takes a byte[]. Although the
plane.getBytes method is sufficient for in-place modification of the
byte[], there may be cases where a copy of the data is made and
modified.

Thus, this method can now explicitly specify the byte[] that will be
used to open the BufferedImage.

If no byte[] is specified, plane.getBytes() will be used.
Merge branch 'awt-refactor'

Refactors the AWT API and adds useful classes (ImageViewer) to pave the way for
developing SCIFIO command line tools.