Add equals for CraftInventory objects. Adds BUKKIT-4110

When working with inventories you regularly end up with different
Inventory objects that have the same underlying Minecraft inventory.
Currently, even those these point to the same thing, they are not
considered equal. With this commit comparing any Inventory object that
represents the same inventory will result in equals(Object) returning
true.
Add player unique ID to (Async)PlayerPreLoginEvent. Adds BUKKIT-5108
Add method to send fake sign updates to players. Adds BUKKIT-2300
Update CraftBukkit to Minecraft 1.7.8
Use fetched GameProfile for getOfflinePlayer(String)

When getting an OfflinePlayer by name we lookup their UUID and then
use that to fetch the OfflinePlayer. If the player has not played on
this server before the resulting OfflinePlayer will return null for
getName(). As this is unintuitive we now create the OfflinePlayer directly
using the profile we looked up and make OfflinePlayer prefer that data.
Check the actual whitelist for Player#isWhitelisted()

The server's check is for whether or not a player can pass the whitelist
not just if the player is on it. That seems like more useful information
but the API has always just checked if they are on it so this commit
restores that.
Check actual whitelist for CraftOfflinePlayer too
Use world-container when finding players to convert. Fixes BUKKIT-5530
Fix missed diff and other small things
Add methods to use arbitrary entries in scoreboards. Adds BUKKIT-3977
Don't do a lookup for obviously invalid usernames
[Bleeding] Re-add missed diff in 1.7.5 update. Fixes BUKKIT-5536

In the 1.7.5 update the diff that called book edit events when editing
books was accidentally dropped because of nms changes within the file.
This commit re-adds the craftbukkit call to restore event behavior.
Import files from mc-dev for diff visibility
Fix getting white list, ban list, and op list. Fixes BUKKIT-5538

The getEntries methods on these return player names instead of UUIDs.
As we need the UUIDs for our API we add a getValues method to get at
the data we need. To further ensure we get the most data possible we
also add a way to get at the stored GameProfile to ensure we always
have both the UUID and the name from the list.
Make skulls pretend to only use names like before 1.7.8.

Any new API here needs more thought, skulls require a name but OfflinePlayer
is not guaranteed to have one. There is a Mojang approved way to get a
complete profile from a name but not from a UUID so for now just pretend
this still only uses names.
Make bans pretend to use names like before 1.7.8.

Bans require a name and UUID but our API only allows for a single string
identifier for a ban entry. Until this is sorted out go back to the old
name based setup since we can always get a UUID given a name.
Handle expired bans correctly. Fixes BUKKIT-5541
Update CraftBukkit to Minecraft 1.7.9
Handle profiles in SkullMeta, they don't store a string anymore.
[Bleeding] Add missing HangingBreakEvent. Fixes BUKKIT-3943

The old PaintingBreakByEntityEvent was deprecated and replaced by
HangingBreakByEntityEvent. However, in the case of being struck by
lightning, only the deprecated event was being called. This fixes that so
that both the new and old events are called appropriately.