add initial .locked(key, fn)

cc @calvinfo 

how does that look ?
kinda hard to test, if you have any suggestions on more tests let me know.
maybe we should add a test that uses redis list and we can check that the events are in sorted order.
@calvinfo 

got it, so we want to not fail if there's problem with `.lock()`, `.unlock()`, instead we should just log those, so how about getting rid of `function(err` completely ?

```js
self.lock(function(){
  // internally.. if there's an error getting a lock 
  // it will emit "error" (err.code = "LOCK_ERROR")
  // if there was no error sets `self.locked` to `true` in 
  // order to check if `.unlock()` was called in tests...
  db.hget('users', msg.userId(), function(err, value){
     self.unlock(key); // emits "error" (err.code == "LOCK_ERROR") if there's an error ?
     if (err) return fn(err);
     db.hset('users', msg.userId(), msg.event(), fn);
  });
});
```

> the potential downside I see is that teammates might forget to call unlock. we could add some sort of warning message if there locks timing out, or add something to the tester if there are outstanding locks when the tests finish.

yup a simple `.locked` and `afterEach` check will make sure that it's never left `.locked=true`.