addCollisionObject is called from the main thread and removeCollisionObject is
usually called from the main thread and rarely from one of the physics worker
threads. This usually happens on cell unloading when object is already removed
from the scene but there is active simulation for it. Which possible because
it's a shared pointer.
There is getUserPointer function which only reads from the container but it's
called only when there is no active simulation so no lock is required.