Use double-dispatching to handle collision events

"I want to cast...Double Dispatch!"

So, we'll need to see if this is really as nifty as I originally
thought it would be.  Here's what we need to do when we want to add
a new type of CollisionHandler:

- Inherit from AbstractCollisionHandler and override HandleCollision
  for the Collider overload (i.e implement the abstract method).
  Alternatively, just derive from an existing concrete subclass.
- Add an overload inside the AbstractCollisionHandler for the new
  subclass so that all existing subclasses get default behavior.
- Add overloads (if required) to existing subclasses.
Remove references to non-existing GUI scripts