copy_stream: handle and block on EAGAIN from the non-pipe IO
splice(2) (called without SPLICE_F_NONBLOCK) only blocks on the
pipe descriptor, but may trigger EAGAIN from the non-pipe
descriptor. So use IO.select to deal with the case where the
non-pipe descriptor is non-blocking and wait on it.
While we're at it, add the IO::Splice.partial and
IO::Splice.full singleton methods to make our life easier
to implement copy_stream with. These methods may also
be used directly by users who may find them useful.