complete conditions before call queue.drain()

code in async.queue:
```
if(data.length == 0) {
  // call drain immediately if there are no tasks
  return async.setImmediate(function() {
    if (q.drain) {
      q.drain();
    }
  });
}
```
If param data is [], q.drain() will be called, but the q.tasks and workers may not be empty.
So I added a condition, made it like this:
```
if(data.length === 0 && q.idle()) {
  // call drain immediately if there are no tasks
  return async.setImmediate(function() {
    if (q.drain) {
      q.drain();
    }
  });
}
```
keep coding style consistent, I think we should fix this btw:
`if (data.length === 0 && q.idle()) {`