CLN: split_and_operate
In the branch I've got going that implements block-wise ops I found a bug in Block.split_and_operate.  This doesn't fix that bug (since I don't have a test case that is independent of the rest of ops branch), just upstreams the cleanups that go along along with it.  Small optimizations.