Fixed various player disconnect problems (fixes #510, #296, and #156)

Previously players who joined the server and were disconnected for various
reasons, such as not being on the active whitelist, would get potentially
strange disconnect reasons and would have left a leave message in chat for
other players to see.

In order to not send the leave message to online players and to avoid
strange reasons on the client-side, the 'online' state of the player is
tracked through use of a boolean variable in their session. The session
tracks the logical 'online' state of the player for use in sending
appropriate messages to both the client and the other online players.

This commit additionally fixes an API compatibility problem where in
PlayerLoginEvent, the player's online state was reported as true when it
should be false for a first-time login.