Add shared locks and revocable shared lock support

This pull request adds shared locks and revocable shared locks to the lock recipe. The logic is based on the ZooKeeper recipe. The PR includes documentation, new tests and passes the various build combinations in Travis. Existing users of the lock recipe will continue to receive exclusive locks by default and should not be impacted by this change.

In terms of additional testing, I've been using this feature in a small cluster for several weeks without any issues. I've also developed a "lockable resource" class on top of it (which caches shared resources until a revocation request is received) and this has been operating properly.