Add edX OAuth2 provider with OpenID Connect support

Yeah, I thought about it but decided to leave for optimization later. In this particular case it is called twice within the life of the handler, but I didn't want to add a contract on that. Let me think about it for a bit.