Propagate exceptions properly for WABS wal fetch

Previously they'd be silently swallowed, which can probably cause all
manners of mischief (such as the appearance of a corrupt WAL file).
Plug pipeline process leaks

Previously, "pipeline" could easily leak zombie processes in retry
loops, failing to call "wait" on them.

Switch to context managers to make this much harder to make a mistake
with.

There is a notable corner case seen in some of the 404 handling code
across backends where the pipeline needs to abort when no exception
has been raised, and for that purpose one can call .abort() to exit
cleanly, even if it causes commands in the pipeline to fail.