[Bleeding] Add support for ThrownExpBottle and Fish to launchProjectile(...). Fixes BUKKIT-1536

Previously, trying to launch a ThrownExpBottle or Fish projectile would
result in an IllegalArgumentException. This commit adds support for both
ThrownExpBottle and Fish, which means that all current projectiles are
now properly supported by this method.
[Bleeding] Re-add EntityShootBowEvent lost in e93a3eb3b4c5234e3e3936bc697d566a42d3b30e. Fixes BUKKIT-4214

In the 1.2 update for CraftBukkit, a missed diff resulted in Skeletons no longer firing an EntityShootBowEvent when they shoot an arrow.
Add methods to get and set arrow knockback. Adds BUKKIT-5103
Add setCritical and isCritical methods to CraftArrow.java. Adds BUKKIT-5113
[Bleeding] Implement ProjectileSource API. Addresses BUKKIT-1038, BUKKIT-1156
[Bleeding] Implement setCharged and getCharged for WitherSkull. Addresses BUKKIT-3060
[Bleeding] Directly set direction in EntityFireball. Fixes BUKKIT-1154

Because EntityFireball.setDirection() adds a random offset to passed
parameters, it is not appropriate for use in an API method. As such,
the values need to be directly set to remain accurate.
[Bleeding] Use correct yaw and pitch when spawning arrows. Fixes BUKKIT-3320
[Bleeding] Fix support for several entities in World.spawn(). Fixes BUKKIT-3284
[Bleeding] Store correct block type when hitting blocks. Fixes BUKKIT-5209

The block obtained and stored within the block object higher up does not
reflect the block at the location being hit, rather it is the air block
the arrow was previously in.  Thusly when the variable is used to check
if the arrow is still in the block, it fails.