Changed callback signatures, the watcher classes are no longer passed to the handlers, but the return value of the handlers are now being used, this solves a lot of issues with ambigue calls, and enables using std::bind