add PlayerJoinEvent and PlayerQuitEvent

Strings would work too, but an unknown string could be passed in. With an enum you know the possible values.
Rather than KickReason I suggest QuitReason so can be any reason for quitting (includes disconnect, socket error, etc.)