Heavy refactoring + added abstraction layer.

Created abstraction: Hostage Interface.
Created 1.7.2 implementation: CraftHostage.

Instead of having a HostageArena for each version of Minecraft, the
abstraction layer (Hostage Interface) allows us to have ONE instance of
HostageArena because we're not directly referencing the version dependent
class: CraftHostage.

But rather, we're indirectly referencing CraftHostage via its interface:
Hostage.

NPCFactory is an abstraction and HostageFactory is the implementation for
each version of Minecraft.

NPCFactory factory = NPCFactory.newInstance(plugin);

factory.getHostage(villager); // This will cast a Bukkit Entity or Bukkit
Villager into a CraftHostage, which gets returned as type Hostage.

If the villager is not an instanceof Hostage, then it will get deleted and
replaced with a Hostage instance. All attributes from villager (location,
name, profession, etc) are transferred to the new Hostage.

This is one of the major problems: That HostageArena allows BattleArena to
take care of the Villager spawning. The problem is that it spawns
Villagers, and not Hostages.

The real problem is trying to replace a Villager with a Hostage inside
CreatureSpawnEvent... This will create a glitch were 6 to 12 Hostages will
spawn, instead of the expected 3.

This needs to be fixed: Either by
1. having HostageArena handle Hostage spawning & persistency.
2. or moving the villager replacement code out of CreatureSpawnEvent.

Like, having CreatureSpawnEvent record the Villagers that spawn and
putting them into a List. Then delaying the replacement of those Villagers
until later (another method, like onStart() or onBegin()).