Optimizing collision detection.

Adding segregated lists for obstacles based on the desired impact side so that we only need to actually look for collisions against objects that are capable of having collisions on the desired side.