feat(watch): add cancelable watch

Implement actual cancelable watch.

fix #83
another implementation of #95

@xiangli-cmu @vito @onsi