add LockManager

Giovanni to review

to support both

```
obj, lock = Foo.get_locked_obj(id)
```

and

```
with Foo.get_locked_obj(id) as obj:
    ...
```

syntaxes