goaoauth2provider: refactor authorization as a discrete task
Refactor the authorization process, opening the URI in the browser and returning the response URI, into a discrete asynchronous method.
This improves a number of concurrency issues, error handling and ensures the dialog doesn't get locked up in a few places.