No functionality change, but I'm posting this for wider review before submitting.
This is a re-attempt at getting D4033 in. The suggestions from that thread have been taken into consideration, and all pre-requisite tasks have been implemented as separate changelists.
This patch should be fairly uncontroversial, as there are no semantic changes involved. The only replacements here are replacing always-acquired mutexes with different always-acquired mutexes. Still, since it's kind of a sweeping change, I'll leave it up for a day or two to give people a chance to comment.
This is entertainingly unlikely to be correct (both before and after your change)