Identity Provider

Add an identity provider interface to state and an implementation for agents. User, Unit and Machine tags use the AgentIdentityProvider to authenticate.
We should also assert that the authenticator can actually authenicate the thing we have just created