performs authentication according to the following contract for any given credential
1. Iterate over all configured authentication handlers
2. Attempt to authenticate a credential if a handler supports it
3. On success attempt to resolve a principal
4. Check whether a resolver is configured for the handler that authenticated the credential
5. If a suitable resolver is found, attempt to resolve the principal
6. If a suitable resolver is not found, use the principal resolved by the authentication handler
7. Check whether the security policy (e.g. any,all) is satisfied
8. If security policy is met return immediately
9. Continue if security policy is not met
10. After all credentials have been attermpted check security policy again and throw AuthenticationException if not satisfied