remove PileupElement.sequencedSingleBaseOpt

doesn't generalize well to an insertion-capable world, and isn't
really that useful anyway.
generalize ReferenceVariant to multiple ref bases

in preparation for broader Deletion support
avoid making multiple SparkContexts in tests

this seems to have been the cause of a crazy nondeterministic
failure of DistributedUtilSuite.
refactor PileupElement, elementAtGreaterLocus

- elementAtGreaterLocus was mimicking the vals in PileupElement;
  cleaner to advance through loci by making new PileupElements
  at each CigarElement
- keep all CigarElements around in PileupElement; track current
  idx into that array
  - used especially in indel code downstream
- correctly handle insertions at the start of a contig (include
  trailing reference base)
- correctly handle insertions at the start of a read (skip them;
  they don't count for reference locus that lands at the first
  read-base after them)
add simple insertion-calling

IndelPoCCaller can now call both.

Next step: working deletion and insertion calling into existing
callers.
push PileupElement.sequencedBases into Alignment

expand Alignment hierarchy to expose `sequencedBases` and
`referenceBases`