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
Added.