Do not check collisions against bodies that do not have a shape

- Also small optimization with bodies that contain multiple shapes (stop checking sub-shapes at first collision)
- That optimization might come back to bite us! But it will also save us from receiving multiple onCollision callbacks in some rare cases!