Fix task error handling

Thanks for greate module!

But on my Mac OS X, `image` task is finished before call next task.
When run `grunt test` on my machine, after `image` task, `'nodeunit' and 'clean'` never called.

I realized that some error handling and asynchronous task handling maybe wrong.

- If you use [async.eachLimit](https://github.com/caolan/async#eachLimit), must call next(errror) when error occured.
- [if task failed, must call `done(error)`](http://gruntjs.com/api/inside-tasks#this.async)