Wait decorator to disallow re-entrantcy

Implemented `wait` decorator that waits for result when the function is called again without first result being available. Wrapping `_auth_me` to get auth token only once. Using it in `CachingAuthenticator` to extract out the waiting pattern.