Lock

adds `.lock()` and `.unlock()`.

cc @calvinfo @gjohnson 
yeah, think i'm +1 on the callback too. that way it can guard against the implementation ever changing