[B+C] Added BrewRecipe, PotionIngredientMeta, and BrewEndEvent. Added getPotions() to Brew(End)Event, which returns an array of Potion objects. Fixes Bukkit-2441 and BUKKIT-1604.

#### The Issue:
Potions have always been the gray area of Bukkit. There's no way to make new potions, no way to add new brewing recipes, and there's no way to override the effects of a potion. 

#### Justification for this PR:
Many plugins attempt to override potion effects or add new effects by using the item's right click event. While a consume event has been added, this PR tackles the issue at it's core by allowing the overriding of a potion effect, so you could essentially give a potion a new effect or nullify it (ie, removing potion of invisibility by replacing it with water breathing). This PR also adds the BrewRecipe class, which acts as a way to increase the number of ingredients, and to modify their behavior through the use of the PotionIngredientMeta class, a wrapper around Minecraft's powerful potion engine. Lastly, this PR adds BrewEndEvent to enable the modification of the resulting potions. This allows for the removal/banning of potions right when they are added, as well as the modification of potions (ie, rename Potion of Invisibility to Potion of Water Breathing.) This PR also adds a getPotions method to Brew(End)Event which returns an array of Bukkit Potion objects for each potion

#### PR Breakdown:
BrewRecipe is tied into CraftBukkit much like the other recipes (Furnace, Crafting). A PotionIngredientMeta is instantiated defining precisely what the ingredient does. These effects include:
- Base Potion Effect, 0-15
- Extended
- Level II
- Splash
- Potion Base (Awkward, Thick, Mundane, or Water)
TileEntityBrewing and SlotBrewing were modified to allow for the new ingredients added in the BrewRecipe to be inserted into the ingredient slot. TileEntityBrewing was then modified to take the new ingredient and retrieve the appropriate bitstring from the potion registry and would then start brewing. Once the brewing is done, BrewEndEvent is called to allow for final modifications of the potions.

Once the potion is complete and the player goes to drink it, PotionBrewer's modifications come in. These modifications allow for the new effects and durations to override the potion's default effects, or if the potion has no effects previously, to add new effects. This can also be done using BrewEndEvent by modifying the Potion's metadata, but one may be desireable over the other.

#### Plugin Example Code:
```java
PotionIngredientMeta underwater = new PotionIngredientMeta(PotionType.ARTLESS, false, false, false, PotionBase.THICK); //13 is the base potion type, extended/levelI/gunpowder as boolean, and the potion's base

BrewRecipe recipe = new BrewRecipe(underwater, Material.INK_SACK); //Registers our ingredient with the PotionIngredientMeta
this.getServer().addRecipe(recipe); //Register the recipe like any other recipe

PotionRecipes.overrideEffect(8205, new PotionEffect(PotionEffectType.WATER_BREATHING, (60 * 3) * 20, 0)); //Override the effect of the resulting potion with the underwater breathing effect
```
#### Relevant PR(s)
The corresponding CraftBukkit pull request is Bukkit/CraftBukkit#943