add existential checks to `iteratorOf`
make `partition(By)?` return generator sequences

Each `part` should be a generator function / sequence that can be
reused, rather than a single consumable iterator instance.
add `partitionBy`