fix(auth): buffer auth requests

Fixes a race condition in the auth library. If several requests for auth
came in at the same time without a cached service catalog, each one
would trigger a request to Keystone. This change makes it so that only
one auth request is made and subsequent calls are buffered.