added ExplosionEvent.Start and ExplosionEvent.Detonate

This PR is similar in nature to the open PRs #1444 and #1291.  The main goal of this PR is to implement the same level of functionality in a simpler patchset.

ExplosionEvent.Start fires when an a new explosion is put in the world.  This event is cancelable and will stop the explosion from happening.

ExplosionEvent.Detonate fires mid explosion and is not cancelable.  It fires before the explosion has impacted the world.  Block information is available via getAffectedBlocks() (returns List<ChunkPosition> referencing affectedBlockPositions).  Entities can be retrieved by getAffectedEntities() (returns List<Entity> referencing a private list generated during doExplosionA()).  These lists can be edited or iterated as needed by the caller.

I didn't see much purpose to a Finish or Post event as passive iteration during the Detonate event is possible.  If there's a good reason to add it then I will.