[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.