[MRG] refactor partitioning cross-validation strategies

There was a lot of repeated code in cross validation `__iter__` methods.

The refactor aims to make the differences between individual strategies clearer by not having them handle masking, negation, etc.