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)
Totally minor point, but my understanding is passing a suffix of a linked list should involve no object allocations