When a client fully reads the content and closes the iterator, the
Client disconnected warning is still generated, as there is no logic
to check whether the GeneratorExit exception was raised after the
client received all of the data. This can be observed when doing
large object reads or using an InternalClient and reading exactly
Content-Length bytes from the returned app_iter body.
The patch amends the behavior to hoist how many bytes client read from
a given part and only raise an exception if there are more parts left
or a part was not fully read.
Lastly, the GeneratorExit exception is no longer swallowed and is
re-raised in the handling code.
Change-Id: I879149897fdb25aae977b7f17e580610b188ce04