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
Yes, this should be changed.  There's a note for it in #308.

I'd prefer to do that as a separate commit/PR however.