Add and implement ExplosionEvent

Creates net.minecraftforge.event.world.ExplosionEvent, extending Event. Contains three sub-events - Pre, During, and Post. ExplosionEvent is implemented in net.minecraft.world.Explosion.

The Explosion event carries:
- The Explosion object itself
- The coördinates where the explosion occurred in the world
- The world the explosion occurred in
- The entity that caused the explosion
- The placer of the explosion. Id est, the person that placed a exploded TNT block, etc.
- Whether or not the explosion is smoking + flaming (whether or not it spawns fire blocks)
- The size of the explosion
- The affected/damaged entities.
- The affected/broken blocks.

ExplosionEvent.Pre is fired in doExplosionA, after some values are established, but before the explosion size is used to determine blocks or entities affected by the explosion. explosionSize, isFlaming, and isSmoking are mutable. AffectedEntities and affectedBlockPositions aren't available.

ExplosionEvent.During is fired during doExplosionA after things like the entities affected, blocks broken, etc. are calculated, but before any action is taken. Explosionsize is no longer mutable, isFlaming and isSmoking are mutable, and AffectedEntities and AffectedBlocks are now available and mutable. ExplosionEvent.Pre and ExplosionEvent.During were both included to allow both explosion size and affected entities + blocks (which are derived using the explosion size) to be mutable.

ExplosionEvent.Post is fired at the end of doExplosionB. Nothing is mutable.

This also stores the cancelation state of the explosion and the affected entities in the Explosion class so that they can be determined in doExplosionA and accessed in doExplosionB.