lib: modify lib/pipeline to work on iterators instead of collection

* Methods in `pipeline` are difficult to use because they are lazy.
* They are highly generic and return a abstract return type, thus
having them in Collection lead to strange API, like `[1,2,3].head(2)` that
is not an Array.
* Because they are in Collection, all standard class like Array show them
in their documentation, confusing beginners.

Moving all pipeline functions on Iterator solve these problems.

This basically reverts commit c0316e522d0d8053c0fb155bf1fbd14979a12202.

Signed-off-by: Jean Privat <jean@pryen.org>