Fix issue in recursive functions

Recursive $callback runs did not propagate $callbacks back to the parent.
As a result, once a callback was nulled in a recursive run (because it was
complete), it kept running in the parent once it got out of the recursion.

Not only did this cause unnecessary CPU (running callbacks that were no longer
needed), we actually had (invalid) parent callback results overwriting (valid)
recursive results.

Change-Id: I19ac79fac9634c22794348330d1ec874274e9dcd