SelectTask.popen_communicate

Implement a couple of more wrapper objects for making working with
subprocesses easier.

The best way to go about this is with:

`SelectTask.popen_communicate(...)`

The args/kwargs to this function are identical to those of Popen.
stdout/stderr are implicitly set to PIPE.  A `Future` is returned and
a CommandResult object (with stdout, stderr attributes) returned on
success. FailedCommand is thrown on error (with a CommandResult instance
accessible via the .result attribute)