Watcher interface update

@wilduck @jmcriffey I updated the interface to the watchers a little bit. The second argument now takes a function that can return a list of models associate with the model watching change. This should be much more flexible to work with.