add out parameter
`mkdir -p $out`
Prevents an error when using multiple targets

Leverages async.each.

The error you would get is "A task's completion callback has fired
when the task was already in a completed state".

It was caused by next() being fired multiple times for each target.