Identity Provider

Add an identity provider interface to state and an implementation for agents. User, Unit and Machine tags use the AgentIdentityProvider to authenticate.
how about just
```go
switch tag := entity.Tag().(type) {
case names.MachineTag, names.UnitTag:
//...

```