I think the way how we POSTPONE a stage and continue it later is not best.
Currently, a subclass can return
NM_ACT_STAGE_RETURN_POSTPONE, to prevent proceeding to the next stage.
Later, the subclass is supposed to directly schedule the next stage. That means, only the subclass is in control how long the current stage is blocked. I think it would be better if every stage is re-entrant, and whenever somebody things it's ready to proceed, it calls the same stage again. And that gets repeated until everybody agrees that the current stage is fully handled.
This branch changes that for stage1 only. Other stages could be done later.