Max recursion async

Here is the implementation for https://github.com/WebFilings/furious/issues/41

This is a rewritten version of https://github.com/WebFilings/furious/pull/52

After considering the comments in the last PR, I rewrote this using a slightly different tactic, checking everything on the `Async` side instead of within the `run_job()` function.