Fix persistence on tamed pets. Fixes BUKKIT-3300

With the persistence api introduced, pets did not have their
persistence flag updated to reflect their persistence. This caused
tame ocelots to not persist under specific conditions.
[Bleeding] Implement periodic chunk garbage collector

This adds two settings to bukkit.yml, allowing activation and control of
two chunk garbage collection triggering conditions:
chunk-gc/period-in-ticks controls a periodic GC, run once every N ticks
(default is 600); chunk-gc/load-threshold causes the GC to run once
after every N calls to loadChunk() on a given world (this call is an API
call used by plugins, and is distinct from the path taken for routine
player movement-based loading).  In both cases, setting to zero will
disable the given GC scheduling strategy.

In either case, the act of doing the GC is simply one of scanning the
loaded chunks, seeing which are NOT being used by one or more players
(due to view-distance) and which are not already queued for unload, and
queueing them for a normal unload.  Ultimately, the unload is then
processed the same as if the chunk were unloaded due to leaving the
view-distance range of all players, so the impact on plugins should be
no different (and strategies such as handling the ChunkUnloadEvent in
order to prevent unload will still work).

The initial interval for the periodic GC is randomized on a per-world
basis, in order to avoid all world being GCed at the same time -
minimizing potential lag spikes.
Don't teleport entities that are considered dead. Addresses BUKKIT-1331

Teleportation should never be processed on dead entities. If you wish
to teleport an entity, do it on a living entity. If you wish to
teleport a player, set their respawn location in PlayerRespawnEvent.
/dev/null does not accept EnchantmentThorns
Return the level, not ID. Fixes BUKKIT-3326

CraftItemStack was erroneously using the enchantment ID instead of level
for the return value of remove enchantment.
Updated version to 1.4.6-R0.2 in pom.xml for Beta.
Updated version to 1.4.6-R0.3-SNAPSHOT for development towards next release.
[Bleeding] Fix corruption due to thread safety issues. Fixes BUKKIT-3333

The 'tag' NBTTagCompound field of the ItemStack assumes that it is OK to
save a reference to an NBT supplied via load() and assumes it is OK to
supply a reference to the internal field during a save(). Neither is true,
as Chunk NBT structures are required to be read-only once created (due to
being written asynchronously off the server thread AND due to the potential
to be passed to a new Chunk if the same chunk is reloaded before the
writing of the NBT is completed by the File I/O thread). Keeping a live
reference to the NBT copy passed in, or to the NBT value passed back
during saving, creates serious thread safety issues which can result in
corrupted data being written to the world data files.

The specific issue here was uncovered by the recent change to use
setName("") on the ItemStack.tag object. When a chunk is being loaded
again before its save is completed, this results in name of the field
in the NBT being set to "". This causes it to be saved as "" instead
of "tag" resulting in it not being properly reloaded in the future which
results in the itemstack losing all of its metadata.
Updated version to 1.4.6-R0.3 in pom.xml for Beta.
Updated version to 1.4.6-R0.4-SNAPSHOT for development towards next release.
Add PathfinderGoalSit for diff visibility
Fix "setSitting" on tameable animals. Fixes BUKKIT-1534

This makes it so animals (tame or not) will sit properly and not move
around.

Wild animals that are sitting may override the sitting position if
they are attacking.
Move the tile entity with the falling block. Adds BUKKIT-3349

Allows for interesting things to be done with world.spawn()
Implement fishing experience. Adds BUKKIT-3348
Update calls to DyeColor getData and getByData. Addresses BUKKIT-2786

These two methods are now deprecated and replaced by the strictly
equivalent calls using wool data.
Update unit test to reflect firework color fix. Fixes BUKKIT-3382

The ItemDye color-int array uses dye data values, not wool.
Merge branch 'master' of git://github.com/Bukkit/CraftBukkit

# By feildmaster (6) and others
# Via Wesley Wolfe
* 'master' of git://github.com/Bukkit/CraftBukkit:
  Update unit test to reflect firework color fix. Fixes BUKKIT-3382
  Update calls to DyeColor getData and getByData. Addresses BUKKIT-2786
  Implement fishing experience. Adds BUKKIT-3348
  Move the tile entity with the falling block. Adds BUKKIT-3349
  Fix "setSitting" on tameable animals. Fixes BUKKIT-1534
  Add PathfinderGoalSit for diff visibility
  Updated version to 1.4.6-R0.4-SNAPSHOT for development towards next release.
  Updated version to 1.4.6-R0.3 in pom.xml for Beta.
  [Bleeding] Fix corruption due to thread safety issues. Fixes BUKKIT-3333
  Updated version to 1.4.6-R0.3-SNAPSHOT for development towards next release.
  Updated version to 1.4.6-R0.2 in pom.xml for Beta.
  Return the level, not ID. Fixes BUKKIT-3326
  /dev/null does not accept EnchantmentThorns
  Don't teleport entities that are considered dead. Addresses BUKKIT-1331
  [Bleeding] Implement periodic chunk garbage collector
  Fix persistence on tamed pets. Fixes BUKKIT-3300