Add verbose error messages on failed player login

Basically it sets the error message on the (Async)PlayerPreLoginEvent to whatever it was going to kick the user for. This allows both the player and the server to know why the player can't connect, instead of just ignoring errors without actually logging them, which makes fixing an error quite hard.