Add a BlockCyclicMap

In principle I could collapse the old `BlockMap` and `CyclicMap` into special cases of this, but it's nice that, for now, I can test them all against one another. The tests even pass!