Adding a new tool with which to mark duplicates:

MarkDuplicatesWithMateCigar.

This tool can replace MarkDuplicates if the input SAM/BAM has Mate CIGAR (MC) optional tags
pre-computed (see the tools RevertOriginalBaseQualitiesAndAddMateCigar and
FixMateInformation).  This allows the new tool to perform a streaming duplicate
marking routine (i.e. a single-pass).  This tool cannot be used with
alignments that have large gaps or reference skips, which happens
frequently in RNA-seq data.

There were many refactors of the old MarkDuplicates and
MarkDuplicatesWithMateCigar, since the share common code.
EstimateLibraryComplexity was caught up in this too.

Many, many, many unit tests were added to were added to prove
equivalency of MarkDuplicatesWithMateCigar to MarkDuplicates.  This also
exposed a few one in a million corner cases in MarkDuplicates both in
duplicate marking as well as optical duplicate detection.  This results
in MarkDuplicates needing to write slightly larger temporary files when
running.  SamFileTester was also improved to handle the various test
cases for duplicate marking testing.