Load all already generated chunks via async chunk system

Currently we use the async chunk loading system only when players trigger
chunk loading. If a chunk is loaded for any other reason it goes through
a separate codepath. This means if a player has trigged a chunk load and
before the chunk loads something else wants the same chunk we will load it
twice and throw away the second result. With this change we instead use
the sync processing feature of the AsynchronousExecutor to load the chunk
which will pull it out of the queue if it was already queued to load. This
means we only ever load a chunk once. Because chunk generation is not
thread safe we still fallback to the vanilla chunk loading system if the
chunk does not currently exist.

This also includes the following commits :

Bukkit/CraftBukkit@85f5776df2a9c827565e799f150ae8a197086a98
Bukkit/CraftBukkit@dce2b356894cf19753552a210d422a90b5f7cca9
Bukkit/CraftBukkit@71f5cbdf85719858e45461a68a1b9f8c801067ca
Bukkit/CraftBukkit@0551358ac4e5748c00ce94a9219d60f11e5e696e
Bukkit/CraftBukkit@1ebddcdc3a4e53b238a227cccdbd294855ef6d53