AS-290: ImpersonatingAuthenticator caches token

This is an optimization over current code where each `authenticate_tenant` first authenticates us against identity and then looks for impersonation token. This code will cache the token returned from identity and reuse it until it gets 401 in which case it will reauth and use the new one. This probably does not impact current usage of auth as much as it will impact auth's usage in metrics since it is going to be impersonating many tenants in a short time.