Refactored BlockChangeDelegate logic to be more efficient.

Currently, BlockChangeDelegate acts as a proxy for plugins to generate
trees. It also is used to support StructureGrowEvents with saplings and
mushrooms. The current implementation required many base edits to various
classes which ends up adds up each time there is an MC update. It also
causes compatibility issues with Forge mods as many methods changed.
In order to solve both issues, I have refactored all code to use the new
capture logic that block placement uses. If a plugin requests a tree to be
generated, the blockstates will be captured and sent back to it. WorldEdit
uses this feature with its '/tool tree' command which allows a player to
right-click a block and generate a tree instantly.
StructureGrowEvents will also capture during generation and send all
captured blockstates in the event. There is one difference between
blockstates captured with placement and blockstates captured with growth
and that is blockstates will be captured for the actual block that the
world expects to place.

There were also a few fixes with the previous block placement logic.
Blocks such as TNT need to avoid activating when cancelled so a check is
in place for that in Chunk. Bonemeals are currently processed by
BlockSapling and ignored with our placement to avoid conflicts. If a block
passes permissions checks, physics are applied and clients are notified
about the new changes to block(s).

A new block event class 'BlockMultiPlaceEvent' has been added to support 2
or more blocks in a single event. This event extends BlockPlaceEvent to
provide compatibility with existing plugins.