Implement SpawnReason.NETHER_PORTAL and DISPENSE_EGG Fixes BUKKIT-3148

Previously any entities spawned through dispensers (monster eggs) or
by nether portals were given the incorrect SpawnReason of SPAWNER_EGG.
This made it impossible to distinguish what exactly happened in regards
to the creature being spawned.

This commit implements two new SpawnReasons: NETHER_PORTAL and
DISPENSE_EGG. The NETHER_PORTAL spawn reason is used for when the entity
being spawned by the nether portal itself. The DISPENSE_EGG reason is used
for when a dispsener "dispenses" a mob into the world.