This replaces the EE's mutex with std::recursive_mutex.
This change has a bit of a trickle-down effect, due to the fact that the EE's mutex is not self-contained, and is used by a number of derived implementations, as well as exposed and used directly by the ValueMap class. So all of these must be changed at once in the same CL, and there's no good way to break it up.