etcdserver: handle watch timeouts and streaming

```
; time curl localhost:4001/v2/keys?wait=true
context deadline exceeded

real	0m10.009s
user	0m0.004s
sys	0m0.001s
```
But the four phase transitions aren't consistent
0 --> 1 = start handleWatch, wait on flush
1 --> 2 = send one event, wait on flush
2 --> 3 = send one event, wait on flush
3 --> end = cancel the context, wait for httpwatch to return

Putting the second two in a loop doesn't make things clearer IMO.