Removing `batch` dependency

This takes advantage of `async.parallel` to refactor the `exec` and `batch` methods.
The main advantage is a lot simpler `exec` method.

**Note:** the results returned in the callback have a slightly different structure, so this may include breaking changes.