Virtual base class for pecotmr's per-element collections. Each
element is a GRanges of variants; the identity tuple and any other
per-element metadata live in mcols(x).
Concrete subclasses add their own collection-level slots. Per-element
values must go in mcols, never in a slot: subsetting narrows the
elements and mcols together, but leaves slots untouched, so a
per-element slot silently ends up the wrong length and positionally wrong.
Invariant
One seqname and one strand per element. range()
splits on both, so a mixed element would return two ranges and break the
1:1 element-to-span mapping the rest of the package relies on. Variants
carry strand * unless the source data says otherwise.