Rewrote login procedure to facilitate reconnecting

In the process I moved a lot of stuff from the Player class to the User
class.
- Command states have been removed (sorta kinda replaced by Login
states)
- merged Remove and Disconnect methods in several classes. Not sure why
they were different to start with.