watch take a callback

Instead of `watch` returning a `chan time.Time` that is quite painful when using custom types, `watch` now take a callback.
This remove an extra goroutine in the `etcd` backend (and soon `zookeeper`) that was doing the translation `chan etcd.Response -> chan time.TIme`
I honestly don't know what's best, please comment.

ping @aluzzardi @crosbymichael @ibuildthecloud
Is there a way where you don't have to pass this if it is always to passed to the func?  In the calling code you could close of the cluster or have the func being a method of a type that has access to the cluster.  It would just be move this detail away from ppl implementing discovery services.