$lock.run => $lock.protect

The lock doesn't run anything, after all. It was named as such in a
vague attempt at consistency with Promise.run and Thread.run (as in,
"run this under the lock"), but those two are now .start, and having
$lock.start({ ... }) is most certainly wrong-sounding.