Add edX OAuth2 provider with OpenID Connect support

Looking again I think it makes sense to define that the same instance of a handler will be use in between calls to `scope` and `claim`. I have to make some changes upstream.

@cpennington Is this a blocker, or can I address it on a separate PR?