Add builtin recursion disable hook

The subclass overriding one of the recursion method is not as reliable
as the parent Async class is always instantiated when the task is
deserialized. This way we can propagate the intention to disable
recursion through the Async options that gets passed around and we can
see how deep a specific recursion chain has gone on. This is potentially
useful for debugging.

The specific implementation is if you explicitly set max depth to -1
then it will ignore the depth check.
Readding test I accidentally deleted :)
Continue to fix that test I dropped
Rename RECURSION_DISABLE to DISABLE_RECURSION
Rename DISABLE_RECURSION to DISABLE_RECURSION_CHECK
Merge pull request #83 from tannermiller-wf/add_recursion_override

Add recursion override