Emit a "lock" event when locked.
Add `getLockerId` method.
Event "lock" now returns the locker.
Support undefined callback, events, expiration.