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...?
GCC complains about these: "#pragma GCC diagnostic not allowed inside functions"