Make pipeline finish() imply flush() and close()

Upon inspection, this API which demands a caller call flush() and
close() ahead of finishing the pipeline is begging to be misused.
Instead, do the reasonable thing and make finish() imply a flush() and
close().
Overhaul pipe and buffering code to greatly increase performance

Generally, the trick is to perform larger system calls while not doing
too much memory copying.

To do this, several measures are taken together:

* Adjust kernel pipe buffering to be larger if possible.

* Monkey-patch tarfile to perform pipe-buffer aligned reads and
  writes.

* Take control of buffering of non-blocking pipes to attempt large,
  kernel pipe buffer-aligned accesses.
Move more blocking file I/O out of WAL-E's main loop

WAL-E uses cooporative scheduling via gevent.  As a result, long
system calls that block execution can cause stalling in other
greenlets.

That is a particularly common occurrence when downloading backups
quickly and write() can block for long periods.

To blunt that, write out files larger than the OS pipe buffer via a
'cat' connected to Python via a non-blocking pipe.  Even should 'cat'
block, this will present as an EAGAIN in Python, allowing another
cooporative task to be scheduled.
dbg