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
Ok good -- as long as there's a ticket for it this is fine for now.