Add Basic OpenID Connect support including UserInfo endpoint

Yeah, I tried to keep `scope` for when it is a string of separated values, and `scopes` when they are in the form of a collection. I'll do another swipe and make sure it is consistent. I agree, it can be confusing.