A Lock primitive, for use in low-level things.
De-confuse start/run on Thread.

We use .run on the Scheduler to mean "run this thing", and .run on
a Promise to mean "promise to run this thing", so Thread.run should
really mean "run this on a new thread".
Implement Promise.Bool.