Simplify `logoutOtherClients` and fix `onReconnect` race.

If we called `login` and then called `logoutOtherClients` before the login
result was recieved, then we would end up with no `onReconnect` callback. Fixed
by just leaving `onReconnect` as it is when calling `logoutOtherClients` -- we
were only replacing `onReconnect` for the sake of tests that have since been
rewritten much more cleanly.

Fixes #1616.
WIP: test for login/logoutOtherClients race.

Doesn't pass yet; it looks like the connection is being dropped, reconnecting,
and logging in with old token before logoutOtherClients callback runs, so when
the bad login method is done, it wipes localStorage.