fix possible lease loss + more accurate complete

- early termination from eg. OpLimit could cause races between
worker clean up and late worker selection
- FramedDataChannelReader could not tell that the underlying
source input stream had been closed. It still does not notice
immediately, but it should at least detect it on the next buffer
fill attempt instead of considering it a poll failure. This does
not fix anything per se