I would make this:

```julia
function imap(mapfunc::Base.Callable, it1, its...)
    IMap(mapfunc, {it1, its...})
end
```

so that it requires at least one iterator. This would also make the length check in `done` unnecessary.