Adding support for sequence dictionary extraction and handling.

(1) Adding ADAMSequenceRecord schema to adam.avdl

ADAMSequenceRecord represents a single @SQ line from the header of a BAM/SAM file.

Unlike the sequence header of a BAM or SAM file, it doesn't contain all the
(optional) entries: genome assembly, MD5, species, etc).  Instead, we restrict ourselves
to a minimum set of metadata (ID, name, length) and a URL that can act as a pointer
for all the other required metadata.

The ADAMSequenceRecord will be the element out of which an aggregate sequence dictionary
will be built.

(2) Added SequenceDictionary class

Aggregates a consistent set of ADAMSequenceRecord objects into a single dictionary.

Most of the work here goes in to providing methods for combining and mapping between
sequence dictionaries, which will be used for cross-BAM or cross-ADAM comparisons.

(3) Extended Bam2Adam to create a SequenceDictionary .dict parquet file

When bam2adam is run on a BAM, create a "sequence dictionary file," which
is a parquet file containing a set of ADAMSequenceRecord objects.

By default, create this with the same base name as the output ADAM file
itself, but with the ".dict" extension.

(4) Adding the ListDict command.

ListDict reads a SequenceDictionary parquet file (".dict") and prints out all the
component ADAMSequenceRecord objects contained in it.

This commit includes:
  1. a new Projection-like class, for the fields from the ADAMSequenceRecord schema.
  2. A new enumeration, ADAMSequenceRecordField, to be used within that class.
  3. the ListDict command itself, which simply prints the order, name, and length of
      the sequences in teh sequence dictionary.

(5) Adding the CompareAdam command

CompareAdam is a command that takes two ADAM files (and their corresponding
sequence dictionaries) as arguments.  It assumes that the same read names are
present in *both* input ADAM files -- for example, if the two files were produced
by different alignment tools run on the same set of reads.

It calculates the number of reads that are unique to each ADAM file, as well as
the number of shared reads which have the same alignment position across the two
BAMS.

This position is computed irrespective of the ordering of the Sequences in the
sequence dictionaries of the two ADAM files, and therefore is a useful end-to-end
test of the SequenceDictionary code, as well as being the basis for more useful
pairwise comparisons of ADAM files in the future.