Identity Provider

Add an identity provider interface to state and an implementation for agents. User, Unit and Machine tags use the AgentIdentityProvider to authenticate.
Several things here:
 * the interface should not live in the same package as the implementation as it brings in unneeded dependencies.   This interface should live in apiserver/interfaces.go
 * Login shouldn't take a *state.State.
 * Login shouldn't take a tag (for the IdentityProvider)

I think we also need a TaggedAuthenticator interface. that looks something like:

type TaggedAuthenticator interface {
  Authenticate(tag, names.Tag, password, nonce string) error
}

The AgentIdentityProvider and UserIdentityProvider become AgentAuthenticator and UserAuthenticator respectively.

The UserAuthenticator will then (very soon now) look up the identity for the user and get the correct IdentityProvider.