Was calling objects.erase(iter) while iter == objects.end(), this is an invalid iterator for erasure and was causing an exception to be thrown during the collision check, leaving objects in an unknown state of awareness.

Further simplified the logic of this function.
OnCollisionEnter and OnCollisionLeave are now called automatically from the Add/Remove collided object methods
Updated with more efficient looping through the new/old collided objects lists (contributed by rcythr)

Also moved calls to OnEnter/OnLeave to the Add/Remove collided objects so they don't have to be explicitly called after adding.
Merge pull request #587 from apathyboy/collision_check_fix

Collision detection fix