Fix retain_fds on Ruby 1.8

If retain_fds was passed on Ruby 1.8, we were blindly appending an extra
argument to Kernel#exec, which was causing all kinds of unhappiness when
exec attempted to turn that Hash into a string argument. We now
conditionalize on the presence of Kernel#spawn (which is a close
approximation of rubies which support the additional argument to #exec)
before adding the additional argument.

Ref #8.