Work towards dynamic loading of readers and writers in Hadoop RDF IO

This commit adds the first stage of work towards supporting entirely
dynamic loading of readers and writers in the Hadoop RDF IO module.
This is intended for use with the TriplesReader, QuadsReader and
TriplesOrQuadsReader to allow them to dynamically select the appropriate
reader to use for a given input file.  Making the loading dynamic allows
users to plug in custom RDF formats to ARQ and register them with the
Hadoop RDF IO module such that no core code changes are required to
start supporting a new input format under Hadoop.
Make WriterFactory interface more generic

The WriterFactory interface needs to be more generic than the
ReaderFactory interface because writers need to cope with arbitrary keys
(even if they will be ignoring them)
Support for dynamically loading writers

This fills out the writer side of the HadoopRdfIORegistry.

It also adds the missing output formats for RDF Thrift
Add missing license headers
Add support for dynamically selected triples/quads output

This commit adds QuadsOutputFormat, TriplesOutputFormat and
TriplesOrQuadsOutputFormat which are counterparts to the existing
equivalent input formats.  These output formats dynamically select the
actual record writer to use based upon the target output filename.  This
is useful for jobs where the output filename may be user supplied so the
desired output format is not known in advance.
Minor typos and white space tweaks