Collision resolution supports arbitrary strategies

CollisionDetector refactored as a base class defining an interface
that arbitrary collision resolution strategies can implement.
SpatialDictionary refactored to be a subclass of CollisionDetector
and to implement the interface.
Added (untested) tests for SpatialDictionary

SpatialDictionary tests are probably working, but I cannot solve
a runtime error. I believe it's due to the HashableRect class that
I created (Python's set data structure requires hashable elements,
and so I added a __hash__ function to pygame.Rect that returns the
id of the .Rect). I don't know enough about Python to fix this
error yet though.
TypeError fixed and all non-collision tests pass.

Collision-based tests fail with a 'NoneType' object not iterable runtime
error.
Fixed SpatialDictionary unit tests and added more

Fixed a _get_nearby_objects() bug where I was discarding a set element,
converting the set to a list, and returning it in one line. But the
return type of discard is not the set itself (it's None). Added basic
tests for the Entity class and HashableRect.
Added documentation. Task 6.2 complete
Fixed bug in Camera, set up  main to move camera based on input
Removed unusued imports from SDtests.
removed Entity from main and Camera
changed border in main to be correct for this demo
cleaned up some code
Merge pull request #10 from NintenJoe/Task6.2

Task 6.2 - Extend Collision Detection to Support Arbitrary Collision Strategies
Merging all changes from the master branch and fixing all merge conflicts.