Refactor login logic to the login widget.

**DO NOT MERGE**

A little work needs to be done yet.
Would be enough with something like the following?

```python
"""
The login sequence is the following:
    - _do_login
    - backend.provider_setup
        - on error: _provider_setup_intermediate
    - _load_provider_config
    - backend.provider_bootstrap
        - on error: _provider_setup_intermediate
    - _provider_config_loaded
    - backend.user_login
        - on error: _authentication_error
    - self._authentication_finished
"""
```