Entities API

This PR represents the progress in adding all entities to Sponge. Ideally the end result should mirror the MC Source, Forge, and the Bukkit API in functionality.

__Players__
- [ ] OfflinePlayer/OnlinePlayer duality (#131)
- [ ] also in (#72)
- [x] getHealth(), setHealth()
- [ ] getPosition(), setPosition()
- [x] getMaxHealth(), setMaxHealth()
- [ ] getHunger(), setHunger(), getSaturation(), setSaturation()
- [ ] isUsingCraftingTable()
- [ ] getOpenInventory()

__Other__
- [ ] Non-mob entities (Items, Armour Stands, Paintings) (#94)
- [ ] hostile mobs
- [ ] friendly mobs
- [ ] villager trades?
- [ ] neutral mobs (Zombie Pigmen, Endermen, Wolves)
- [x] ambient mobs (Bats) (#72)
- [ ] Entity naming (#45)

__Entities__
- [x] setSize(), getXZSize(), getHeight()
- [x] getScale(), setScale()
- [x] getMaxHealth(), setMaxHealth()

__Merchants__
- [x] getCustomer(), setCustomer()
- [ ] getTradeOffers(), setTradeOffers()

__Tameable__
- [x] isTamed(), setTamed()
- [x] getOwner(), setOwner()

__Tamer__
- [x] getName()

__Ageable__
- [x] getAge(), setAge()
- [x] isBaby(), setBaby()
- [x] isAdult(), setAdult()
- [x] canBreed(), setBreeding()
- [x] setScaleForAge()

__Villager__
- [x] getProfession(), setProfession()
- [x] isPlaying()
- [x] isTrading()

__Bat__
- [x] isAwake(), setAwake()

__Skeleton__
- [x] getSkeletonType(), setSkeletonType()

__Slime__
- [x] getSize(), setSize()

__TradeOffer__
- [ ] getFirstBuyingItem()
- [ ] getSecondBuyingItem()
- [ ] getSellingItem()
- [ ] getMaxUses()
- [ ] getUses()
Shouldn't this (and other `values()` methods) be an unmodifiable list? It's possible for some piece of code to set an array item to `null`. e.g.
```java
VanillaProfession[] professions = VanillaProfession.values();
professions[0] = null;

// Or change it completely

professions[1] = new VanillaProfession() {
    // Something here
}
professions[2] = professions[3];
```