Don't watch run navigator.id.watch twice (bug 1024616)

* Listen to the existing events so that we can not need to call navigator.id.watch twice.
* Turn off the app's global login listener whilst we need to listen to it for reset purposes.
* Rename a few things to help make this clearer. 
* Clear one-off events always, just in case it wasn't called prior to a reject/resolve.
* Remove the event forking code.
I don't think this comment is needed because the deferred API is common and well documented