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.