feat(watch): add cancelable watch

Implement actual cancelable watch.

Thanks for the extra assistance from @onsi and @vito .
Merge pull request #108 from unihorn/15

feat(watch): add cancelable watch