[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.
Don't call duplicate interact air events. Fixes BUKKIT-5359

Previously we attempted to call interact events in cases that were missing
by modifying the arm swing logic. This, however, was too broad and started
triggering events in cases we already covered leading to duplicates. Since
the only case we can handle cleanly and the primary point of the previous
fix was fluids we now instead simply treat fluids as air for this check.
This also ensures we do not get duplicate events when the player is in a
fluid and hits a normal block, unlike the previous change.

This reverts commit 68b702f7 and replaces it with a better fix.