Added BlockPlaceEvent which fires before placing a block.

To further improve protection, all block placements will trigger a
BlockPlaceEvent with information about the block being placed.

I have also added a new BlockSnapshot class which is based on CraftBukkit's
BlockState but doesn't allow for modification after the snapshot is taken.
This class provides a way to restore any location back to a previous
snapshot. You also have the ability to apply a blocksnapshot to another
location. By default, a BlockSnapshot is taken before all vanilla
breaks/placements and sent via the event.

This implementation was based off the following commits by CraftBukkit :

https://github.com/Bukkit/CraftBukkit/commit/b39ef5e26f57029eebe2778c09c1757e6276b96b
https://github.com/Bukkit/CraftBukkit/commit/4aae8151825fef46dffc1bc9266730d3f493d9d6
https://github.com/Bukkit/CraftBukkit/commit/7b79da5c316aab18b5d82bc5b4c592c41567e343
https://github.com/Bukkit/CraftBukkit/commit/791ba7591a2853442fd2ba4245f9f4322fb1f001
https://github.com/Bukkit/CraftBukkit/commit/ed63bd525b36780e57d1576842e3d45f4bf5d55d
https://github.com/Bukkit/CraftBukkit/commit/c756ace0771b57b53ede0a1b6f82be760f1dd124
https://github.com/Bukkit/CraftBukkit/commit/f9b830267c104b7437393fed94c0e3d4d96d249e