Fix recover after failed transitions

Return a rejection after async error handling to stop further execution
and prevent state.enter from being called.
Reset the firstTransition flag on failure, too, to be able to redirect
to another route on failure and do a pushState for it.