Make `take` more generic
Add `takeAll`