This seems like such an obvious abstraction, that it's hard to believe noone came up with a macro to do this a long time ago.
However, that seems like a sign of a good or well explained idea.
While, I've never seen something similar being used before, I wouldn't call it revolutionary since it's not really making the function iterative, it's just moving the call stack to the heap.
It would still be a very nice convenience for functions that are more elegantly expressed recursively.