DNM: new watch/notify framework

This is mostly complete.  The main remaining items are to convert rgw and
librbd over to use the new version of the API.

One thing I ran out of steam before doing is writing a reference user for
the API that uses all elements to full effect.  I think the use case I have in
mind is a shared cache with invalidates, like what RGW is doing.  But instead of
writing a toy or test implementation, it would be best to write a generic
shared-cache module that has all the features RGW needs and then migrate to using
it.  Maybe that will be simpler than fixing up RGW to make use of watch_check()
properly...?
Should the OSD's osd_client_watch_timeout value be exposed somehow just in case the client config and OSD config don't match?

Perhaps more generally, is there a use case for knowing how many msecs have passed (minus some latency effects) since the server last saw a ping?  Could this be simplified to just returning an -ETIMEDOUT if the number of secs >= the OSD's watch timeout?