Refactor login logic to the login widget.

**DO NOT MERGE**

A little work needs to be done yet.
I think that we could use something like:

```python
class LoginState(object):
    """
    This class holds the states related to the login sequence.
    """

    def __init__(self):
        # `wait_to_login` defines whether we should wait to start the login
        # sequence or we should start right away.
        # This is used, for instance, to hold on until EIP is started since the
        # firewall could block the login attempt.
        self.wait_to_login = False

        # This state indicates that the login sequence was required to start
        # but it was set on hold since we `wait_to_login` was True
        self.login_waiting = False

        # Full username of the logged user, with the format: 'user@provider'
        self.full_logged_username = None
```

But I wonder about moving those states to the backend. I think that if we need to wait or not is not a concern of the backend since the internet block is about how we choose to start the services.
We may want to make the different backend components to interact with each other to have in mind this scenario.

The logged username could make sense to get it from the backend and the zmq request could make sense.
The idea would be to have a sync interface (`LoginState`) to the async api (`LeapBackend`), right?