Another step on the way to replacing all of the RecursiveMutex instances with the Mutex ones.
This PR removes the RecursiveMutex object by splitting it into two Mutex objects, and ensuring they are always acquired in the same order.
Related to #19303.