Change resume API to update_progress

add additional checks to ensure correct state of action
use catch/throw for suspending, can be called only in #run