provider detection

As we're adding more and more providers,
it's important to have solid foundations to support them.

This PR:

* Adds helpers to list all the auth providers and return true/false if a particular provider is available
* Rewrites login/profile and login/button to take advantages of them.

The components behave as follows:
* If no provider is specified, displays login for all the providers of the app
* If no provider is specified and none is available in the app, the component renders a warning message.
* For the providers that are requested but not available, a `console.error` is performed. The developer is warned, not the user.
* If no provider is available for login, renders a warning message.