Add Hoist.lock

allows grabbing a concurrent lock to a key so you can lock between
events

fixes hoist/Hoist#49