Implement ::lock! and #lock! methods

Howdy -- I love the library, very nice and clean implementation of the approach laid out in the Redis docs. For our particular use case, it would be most useful to have a method that returns the value of the block passed if the lock is successfully acquired, and raises an error if not. In this patch I've added a `#lock!` method to do just that. Thanks for taking a look!
Mat