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
```
There are there phases:
1. read out the header with empty body
2. read out normal chunked body: size\r\nbody [repeated several times]
3. read out EOF for some reason/ self close.

all the three case should receive from the same channel:
```
select {
	case <-rw.ch:
	case <-time.After(time.Second):
		t.Fatalf("timed out waiting for flush")
	}
```