improvements to redis lock for better use with 'with' statement

I made some changes to the way locking is currently implemented. The lock() function used to return just True or False, which left it impossible to examine the created lock object (i.e. if you wanted to see how long it's acquired for). It was also impossible to specify blocking in the lock function. Both of these are fixed without breaking previous behavior. This makes things much easier to use with Python's with statement, for example:

```
with r.lock('foo', timeout=10000000) as lock:
    print lock.acquired_until
```

In addition to this, I've added the extendLock function, which let's the user extend an already existent Lock, assuming he hasn't run out of time on it. This is useful if you want some script to continuously renew a lock as long as it's using it, but make sure the lock expires in a reasonable amount of time if the box the script is on dies. Example usage:

```
with r.lock('foo', timeout=10000) as lock:
    while True:
        #do stuff here
        lock.extendLock(10000)
```

In the above example, some box can maintain a lock and constantly do some action, but if it suddenly dies, or loses network connectivity, a new box will automatically take over for it after 10000 without us needing to manually or programmatically reset a lock with no timeout.