Potential speed up
Nice work btw.

You don't need to decode things like quality values, auxiliary tags and read names.   These are all intermingled together in BAM, but are (usually) in separate blocks for CRAM.  This means there can be potential speed gains to selectively decoding only the bits you need.

I don't know anything about the Nimble API to htslib, but see for example `samtools flagstat` which is much faster on CRAM than BAM due to this:

https://github.com/samtools/samtools/blob/10b403702571299cb9a85333935b6d762badbb88/bam_stat.c#L142-L146

    if (hts_set_opt(fp, CRAM_OPT_REQUIRED_FIELDS,
                    SAM_FLAG | SAM_MAPQ | SAM_RNEXT)) {
        fprintf(stderr, "Failed to set CRAM_OPT_REQUIRED_FIELDS value\n");
        return 1;
    }