Add `pipeline` convenience method for passing extra fds (#59655)
Our underlying infrastructure supports passing fds beyond stdio, but
there isn't really any support from them in the surface API. This adds a
convenient method to `pipeline`, which is the usual method to set up
various sorts of redirects. It basically mirrors the `3> foo` syntax in
bash.