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. This was required when `ImpersonatingAuthenticator.authenticate_tenant` is called many times when it is not already having a token. Using it in `CachingAuthenticator` to extract out the waiting pattern. 
I am not too sure of declaring internal members prefixed with `_` via characteristic. I *could* make immutable attributes (all except `_token`) public and use characteristic. What do you think? Also, do you think `_token` should be considered when calculating hash?