Fix auth_token does version request for no token

When a request came in with no token and the auth_token middleware
wasn't configured with an auth version, a request would be made to
fetch the versions supported by the server. This causes problems in
projects that have unit tests using the auth_token middleware because
they didn't expect to have an Identity server running.

The fix for this is to refactor the identity version handling to a
strategy pattern.

There were 2 subclasses of _IdentityServer in auth_token, one for
V2 and one for V3. This is excessive since there's only a couple of
methods that are needed and not all the _IdentityServer class. Using
the pricipal of preferring composition over inheritance, the code to
handle V2/V3 is moved into a simpler strategy pattern. This also
moves code out of the AuthProtocol class which is too complicated
already, and it allows more refactoring since the _IdentityServer
reference can be created and passed to extracted classes for them
to use.

Closes-Bug: #1404294
Change-Id: If69fbb73bea268b96e4b1e9ad81a736495a2b58a