feat(watch): add cancelable watch

Implement actual cancelable watch.

Thanks for the extra assistance from @onsi and @vito .