Identity Provider

Add an identity provider interface to state and an implementation for agents. User, Unit and Machine tags use the AgentIdentityProvider to authenticate.
User, machine and unit tags are authenticated by the AgentIdentityProvider. It needs the whole tag to do this as, under the hood, it calls: st.FindEntity(tag.String())

See the agent.go diff