Fix #2977: Error calling IO.write with a FIFO

In MRI, IO.write opens a file with a default mode of File::RDONLY, and does not seek if offset is not given. Fixing these would have rubinius' IO.write behave like MRI's when it's called with a FIFO.
We don't want random conditionals like these in specs, it should instead be a proper guard. I'm also not sure if we want to rely on shell executables for this in the first place.