Don't set O_NONBLOCK on shellspawn's stdin
O_NONBLOCK is a "file status flag", which means it is set on the underlying file, not individual file descriptors. This means that, when we pass our stdin to the child directly, they will see it as O_NONBLOCK (but that's not supposed to happen).
The workaround is to leave it as a blocking file but instead use FIONREAD to determine exactly how many bytes we can read without blocking.