Methods like #select, #find_all, #filter, #remove, etc etc return Enumerator when called without block

This matches the behavior of Ruby's built-in collections as
regards #select, #reject, etc
Reimplemented List/Vector/Set#partition

Now #partition calls the passed block ONLY once for each item in the
original collection. The specs have been made stricter. It returns
an Enumerator if no block is passed (just like the built-in Ruby
collections)