[SPARK-2764] Simplify daemon.py process structure

Curently, daemon.py forks a pool of numProcessors subprocesses, and those processes fork themselves again to create the actual Python worker processes that handle data.

I think that this extra layer of indirection is unnecessary and adds a lot of complexity.  This commit attempts to remove this middle layer of subprocesses by launching the workers directly from daemon.py.

See https://github.com/mesos/spark/pull/563 for the original PR that added daemon.py, where I raise some issues with the current design.
@davies raised a good question about whether `select.select()` can return other errors here and whether we should try to more gracefully handle those errors.  According to `man select`:

```
     An error return from select() indicates:

     [EAGAIN]           The kernel was (perhaps temporarily) unable to allocate the requested number of file descriptors.

     [EBADF]            One of the descriptor sets specified an invalid descriptor.

     [EINTR]            A signal was delivered before the time limit expired and before any of the selected events occurred.

     [EINVAL]           The specified time limit is invalid.  One of its components is negative or too large.

     [EINVAL]           ndfs is greater than FD_SETSIZE and _DARWIN_UNLIMITED_SELECT is not defined.
```

I think only `EINTR` is recoverable here.  I've updated this code to use the `EINTR` constant instead of the magic number `4`.