OK @Jack Huey I pushed a bunch of nits and minor changes to your branch. I'm going to merge the PR, assuming travis is green. I sort of convinced myself that the strategy is correct, modulo that I think we're not handling the "refined answers" correctly, but that is probably pre-existing, as you pointed out.

I suspect we can continue to cleanup the code, but that seems better pursued as an iterative strategy. (If nothing else, I found that some of the comments made more sense in the recursive setup.)

One thing I found a bit hard to read was the idiom where we would pop something from the stack after getting a result to look at the "next top-most" thing. I'm not quite sure what would make it nicer though. =)

trying one last thing

So, I definitely see where you're coming from with the "next top-most thing"

I thought about this. Was thinking of how to maybe delay that handling to the beginning of the next loop (like storing some sort of answer), but didn't explore too much. If anything, it can be done iteratively

but we'd have to think a bit carefully about it to make sure it all works out

anyway, I merged the PR

I should file some follow-up issues

and besides it's kind of wasteful, no?

I think this is where benchmarks would be nice. Just how much overhead is there. The other thing with this: right now, when QuantumExceeded is returned, the next iteration pursues the next strand (and the current one gets put at the end)