Refactor EntityDamageEvents. Adds BUKKIT-1944 & BUKKIT-3684
Use correct method for getting player's team. Fixes BUKKIT-4050

The method getTeam gets the team from name of, as opposed to getting the
team a player belongs to.

This also addresses BUKKIT-4002 and partially BUKKIT-4044
Change perspective of team checking. Fixes BUKKIT-4044

The method's return value was being incorrectly calculated from the
perspective of this.canHurt(that), where it's actually used from the
this.canBeHurtBy(that) perspective.
Fix boat dying twice.
Use chunk tile entities instead of world

Don't loop through all TEs in world, get ones from the chunks we care about.
Vehicle movement packet improvements
Various things
Add MobEffect from mc-dev for diff visibility
Use wall time instead of ticks for more things
Goofy potentially interesting but probably breaking optimizations
Fix players being incorrectly attached to entities, fixes BUKKIT-2993

Often times when the EntityTracker is spawning entities for a player because they have entered that player's visible area, it will sometimes spawn the player first and sometimes spawn the vehicle first.

This causes issues because EntityTracker always sends an attach packet after it spawns the vehicle, when in some cases, the player hasn't been spawned. This results in vehicles without entities, teleporting players, and other issues.

In order to fix this issue and guarantee both the player and vehicle have been spawned before sending the attach packet we need to make sure we're accounting for both cases. We can do this by comparing the entity ids (which are incremental and never reused).

If the tracker is a vehicle or passenger, make sure its id is greater than its counterpart's id. This will ensure that its counterpart is spawned before sending the attach packet.