Refactored Formats to ease creation

The TypedFormat interface was removed, along with all generic parameters
in the Format class hierarchy. This was done so that Formats can be
created without requiring all components to be defined beforehand, or
for cases when a component does not need functionality beyond some
default implementation (e.g. the AbstractChecker is sufficient if just
suffix matching is required).

Since classes can't be implemented with an arbitrary number of generic
parameters, new API was added for Formats to delcare their custom
classes. Any component class not found is assumed to be one of a new set
of Default implementations, that simply extend the corresponding
abstract functionality.

Because of the loss of generics, the Format API can no longer guarantee
the concrete return types of its methods. This also affected some
changes in the DefaultFormatService data models. However, type safety
can still be provided by narrowing the return type of these methods in
the concrete Format implementations - if desired. It just can't be
provided in an abstract layer.

Also, some conventions for Formats were being passed through the
constructors (format name and associated suffixes). Because constructors
are not inherited and can not be enforced by the interface, this is
non-intuitive when adding new Formats. To lean more heavily on the
interface, these constructors have been removed, along with the abstract
implementation of these methods - forcing their implementation when
creating a new Format.
Removed unnecessary FakeFormat components

The Checker and Writer implementations were unnecessary in FakeFormat.
They have been removed, reverting to their Default implementations.
Updated scifio-tutorials for new Format API

The tutorials have been updated for the refactored Format API, and
do a better job discussing what's necessary to create a custom Format
using this new API.