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 think if I do that, then all Store methods will have to start potentially returning errors. I also wasn't sure that I wanted to make it impossible to store disparate types in a Store. I don't know, I could go either way on this.