ReferenceBlockSplittingVariantIterator

I would like to merge this so we don't have to use special branches in foghorn anymore.

This is a rebased version of #327 plus:
* an update to make the Variant mutators private until #320 is ready
* CMake updates

Thanks to @kgururaj for adding the N-base feature to fix #306
:+1: for creating a separate test file instead of adding to the monstrosity that is variant_reader_test