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
It's not clear to me why calling refresh needs to be done by the discoveryservice. I thought watch was just to notify that something changed, and then the core code would query.  Can you not just pass in func() which would be a closure that would call refresh(cluster, nodes)