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.
They are if you treat them as immutable (update replaces, not modifies). Added comment.