add user identity provisioning

@liggitt This builds on top of https://github.com/openshift/origin/pull/334, so I'll rebase it again once yours goes in, but I'm still looking for feedback.
> Why does any of this code need to know the specifics of the struct for the object identity? Passing the interface through would accomplish the same thing.

@smarterclayton Today.  Right now Identities have a one to one mapping with OpenShift users.  That means that a UserInfo interface doesn't have to worry about whether it is representing an Identity or a User.  Even though the two types can be represented with similar fields, they aren't the same.  Given that the UserInfo type has a getScope() method, it looks like it is intended to represent an OpenShift user regardless of which Identity was used to locate that user.  While the UserInfo could be used to pass the values through, it looks like that's just the result of a similarity in types not the intent of the types themselves.   Also, another reason why UserInfo isn't a great return type for an external oauth provider that is returning an identity.