Improve authentication process

* No token reuse; fixes #728
* Better error message for invalid credentials; fixes #622
* Enable retrying 2FA code input if previous one was invalid

New tokens are created with name such as `hub for mislav@macbook-pro.local`. An incremented number is added onto the name if the previous name is taken.

If you use hub on 5 computers, that will generate 5 distinct tokens now. Not the end of the world I guess.
Minor, we could cache `local_user` as `@local_use ||= Etc.getlogin`. Same for `local_hostname`.