Prevent clients logging in multiple times (fixes #150).

Also adds (Async)PlayerPreLoginEvent support.
Provide hostname in PlayerLoginEvent.
Implemented AsyncPlayerChatEvent (fixes #103).
Tidied up EventFactory and its uses.
Made some utility classes final.
UpdateBlockEntityMessage protocol courtesy of @Aaron1101
Progress on Skulls. Still WIP.
- Skulls place with correct position.. half the time (wut)
- TileEntity is created on place, but I can't set any of the data needed (halp)
  - Should save/load properly if it actually gets set
- ItemMeta should be implemented properly. Not tested yet.
Add in rotation logic.

Due to the client not recieving the packets for entity updates, this won't show as actually rotated (but it's in the NBT)
Change Player.sendBlockEntityUpdate to Player.sendSkullChange (packet is used for more than just skulls, derp), and also fix the operation
Error if not the correct materialdata
Derp, actually return the drops for a skull
Changes to storage of Profiles
- Player profile is now saved and loaded, along with textures etc. (not yet tested)
- Not sure how Vanilla implementation gets profile for offline players etc
- Moved some static methods to BlockSkull
Don't update twice on place
TODOs for Full profile implementation (same as what's on the blocks)
This moves code for creating/saving NBT data for a PlayerProfile to the profile. It also updates the MetaSkull to use 1.8's format (same as the block)
Fix rotation
Move static method to BlockSkull
More work
More work
Keep item metadata when adding to inventory