The processpart function also did some stream maintenance, so let's move it to
the part iterator as well, as part of moving all part iteration logic into the
class.
There is one place processpart is called outside of the normal loop, so we
manually handle the seek there.
The now-empty try/finally will be removed in a later patch, for ease of review.
I think there is a change in behavior here.
Before, _processpart() would catch SystemExit and KeyboardInterrupt and not attempt part.seek(). After this change, it always does the part.seek() courtesy of being in a finally block.
The problem with this is that we may attempt I/O after process termination is requested. This can lead to bad things, as the commit message for 9a9629b9416c details.
We mustn't attempt possibly blocking I/O after process termination is requested.