slight code refactor and moved OpenID into ExtraProviders

I've given it a good test, fixed a no0b bug:

`if (string.IsNullOrEmpty(mode) || parameters[mode] == "cancel")`

You had actually written the following:

`if (string.IsNullOrEmpty(mode) || mode == "cancel")`

Mode is the key...

`var mode = parameters.AllKeys.SingleOrDefault(x => x == "openid.mode");`

So the comparison was never true. 

Apart from that it's all good, I moved the providers into the Extra's library, because I'm actually pretty happy with how well it works. I didn't actually think it would work so well. 

I've created the packages and put them on Nuget as Beta's.