Fix CATCH/CONTROL phaser and thread interaction.

We over-shared the blocks, meaning that once threads showed up we got
into weird problems. Possibly recursion could reproduce it too. In the
threads case, the CATCH in Lock.protect sometimes tried to unlock the
wrong mutex.