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.
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.
Fixed SequenceDictionary.toMap's behavior on permutations.

The original toMap implementation in SequenceDictionary was way too complicated, and didn't
handle permutations of the sequences correctly (it was assigning completely new IDs on conflicts).

This implementation is much simpler, and handles the correct behavior in cases where the two
dictionaries are permutations of each other's assignments.  This behavior is also captured
in a test.
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.
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.
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.
Adding two test BAMS for comparison tests with CompareAdam

The two BAMs are composed of 400 random sequences, 200 chosen from
each of chromosomes 1 and 2.  They were then aligned back to chromosomes
1 and 2 using bwa mem to produce these BAM files.

The *only* difference in the two alignment steps was that the two
bwa indices were built from FASTA files one of which contained
chromosomes 1 and 2 (in that order), while the other contained chromosomes
2 then 1 (again, in that order).

Therefore, the two BAMS should *only* differ in their @SQ sequence dictionary
header entries.