Move explosions into weapons (#64)

Explosions such as grenades implemented
as pseudoweapons, which fire fireballs.
All bullets can now fire other bullet types
off events such as out of range and
proximity.

However, bullets now need to be
initialised as 2-step since it and weapons
reference each other.

Add elevation and pseudoweapons to JSON
Add Z_FACTOR constant for regular gravity
Fix crashes from wall bouncing out of map
Add GravityFactor to bullets for different
gravities
Add AngleOffset to gun for different
explosion patterns