[Bleeding] Refactor and rework PlayerRespawnEvent. Fixes BUKKIT-2094, BUKKIT-4082, BUKKIT-4561, BUKKIT-4327, BUKKIT-4788, BUKKIT-4899

PlayerRespawnEvent has been moved to before the actual respawn
processing is done, to prevent issues due to inconsistent states, and
to allow for it to be cancellable.  A PlayerSpawnEvent has been added
for modification of the player after the respawn has occurred.  A
setRespawnImmidiately() method has been added to the PlayerDeathEvent
to allow for plugins to instantly respawn players.  Adds a
Player.respawn() method to respawn a player if they are dead.