Async queue runner fix

If an async spec throws an exception during the synchronous part of the execution (where the try/catch still takes effect), the QueueRunner now finishes off the rest of the functions that it was supposed to run (iteratively since recursive isn't necessary).