Add method for creating MismatchBlocks

Plan to use this to save memory. Don't need to store entire sequence, only where alignment mismatches reference
Add test for AlignmentBlock.createMismatchBlocks, discover and fix some bugs
Merge some redundant code in SamAlignment.createAlignmentBlocks
Add base qualities to MismatchBlock
Remove baseAlignment field from AlignmentBlock, was only needed for BisulfiteBaseInfo
Actually implement reduce read reduction, storing only the mismatches of blocks

Bases can always be reconstructed because we store the reference (same among all blocks), qualities we ditch and only store in mismatch locations
Move block.reduce to SamAlignment.finish.

Store reference to genome in AlignmentBlock, rather than reference sequence of bases, because those objects might not get reused. Only have 1 genome at a time
Stop using soft/weak refs for bases, the Reference objects occupy more memory than they save
Add memory testing of AlignmentBlock

Fix some bugs in RuntimeUtils (I think) to deal with null fields
null-out SamAlignment.readSequence one alignments are done loading, saves a bit of memory

Remove some commented code regarding SoftReferences, comment out some lazy-loading code
We now avoid storing the readSequence altogether, get it from SAMRecord as necessary

Remove mateSequence getting/setting. This appeared to serve no useful purpose
Keep full quality array even for MismatchBlocks
Purge SAMRecords from memory (and keep a WeakReference) iff we can restore from file

Check whether we can reload only once per file, store results
Add unit test for lazy loading