Use childErrno only if we fully read it

If reading childErrno from child process failed or the read was partial,
a bogus errno value was set and used to create an OSError.  This patch
use errno value when read failed, and EIO when read from client was
partial.
raise OSError with errno

When the child process fails to exec, we raise a non-standard OSError,
that has only a string and lacks an errno value. This patch fixes this
issue by copying childErrno onto errno and calling PyErr_SetFromErrno().
The alternative, of copying PyErr_SetFromErrno code into our own
_PyErr_SetFromChildErrno() was rejected due to its complexity.