Fix async queue bugs

The 'async-queue' module is awesome, but I stumbled upon several annoying issues while using it under certain circumstances.

This pull request contains fixes for 3 different bugs.

1. the 'complete' event is not always fired when the queue is stopped (e56ac54 + cf55606)

2. when a callback contains an 'until' method depending on the result of the previous callback execution, it can evaluate to a wrong value if the previous callback triggers a pause, because 'until' is evaluated immediately, instead of waiting for the current callback execution to resume the process (e13268d + f51c128). The root cause of this phenomenon is because 'run' always gets the next callback, thus always evaluate the 'until' function of the next callback. But 'run' doesn't need to get the next callback at all when the current callback execution says not to continue running the queue (for exemple when 'pause' or 'stop' has been called).

3. when pause() and run() are called "synchronously" by a callback execution, the run() call doesn't do what we expect (= resume) but triggers an extra execution of the callback. This can be fixed by keeping a reference somewhere to know if we are inside a callback execution, so that the run method behaves adequately (c399b92), fixes issues [#2528602](http://yuilibrary.com/projects/yui3/ticket/2528602) / [#2531758](http://yuilibrary.com/projects/yui3/ticket/2531758) / [#2531844](http://yuilibrary.com/projects/yui3/ticket/2531844)

Should I file separate bug reports on http://yuilibrary.com/ for the first 2 issues that have not been reported previously ? I provided test cases in separate commits (1. e56ac54 / 2. e13268d), so it might not be necessary.

Thanks for having a look.