Task 6.2 - Extend Collision Detection to Support Arbitrary Collision Strategies

1. Refactored CollisionDetector such that CollisionDetector is an abstract base class that just defines an interface.
2. SpatialDictionary now implements the CollisionDetector interface and includes more rigorous testing.
3. SpatialDictionary now takes a list of _hashable_ bounding volumes vs. entities.
4. Extended pygame.Rect in the HashableRect class so we can use them with the SpatialDictionary.
5. Added unit tests for the HashableRect and Entity classes.