This is pretty amazing. Im dealing with this very issue on my app with devise and omniauth.
One thingI havent seen asked and answered is what do you do if the OAUTH provider does not supply email(which you mentioned is used to determined if the user has already signed in via a different provider).
For example. A user signs in via Facebook and is authenticated(his email and provider uid is stored). He then goes to a different machine/browser and signs in via Twitter which does not provide an email address neccessary to associated with a previous Facebook sign in. What then?