mojo: Simplify update code and fix deadlock with update failure.
I need to reject the promise being waited on instead of returning a new
one (oops), otherwise the whole thing deadlocks waiting on a rejection
that will never come.
The upside is that I was able to safely remove a lot of update code,
though other changes are needed to make that work right.