Closes #3006 thanks @ikudrickiy!
This PR implements a lot of low hanging fruit optimizations to the narrowphase and realistic solver.
Notably:
* Working in the local polygon space as much as possible speeds things up
* Add another pair filtering condition on the `SparseHashGridCollisionProcessor` which reduces pairs passed to narrowphase
* Switching to c-style loops where possible
* Caching component calls
* Removing allocations where it makes sense
* Optimize Side.fromDirection(direction: Vector): Side - thanks @ikudrickiy!
Also this fixes a bug in the new physics config merging, and re-arranged to better match the existing pattern