Watch based client cache

In preparation for moving the scheduler into its own plugin, these are some objects that make it really easy.

...of course this won't be useful without more advanced watching in the server. I'm working on that.
I'm not 100% clear about how this is different enough from a channel to create a new struct.  Couldn't we just use a channel for this?