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 large tar member write blocking file I/O out of main process

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
Use "from ... import" rather than import as

Similar functionality, less repitition and more idiomatic.
Use module import rather than function import

Function imports make mocking harder and are less consistent with modern
WAL-E style.
Use larger buffers for temporary file reads for performance

As witnessed this would otherwise perform very small 8K reads by
default.  Reduce the amount of syscall thrashing and memory shuffling
by Python by asking for larger amounts.