add Q npm and add defer functionality to async queue

Have async queue return a promise that will allow for resolving or rejecting the stack effectively halting remain calls in the async stack if any are remaining

Not sure if Q is the preferred npm for promises but I have some good experiences with it. Let me know if a different promise package is preferred.