Fix pidproxy termination signals behavior

Fix pidproxy problem when receiving a SIGTERM, SIGINT or SIGQUIT, instead of only after relaying the signal it to its child process and terminate, it should wait for the child process termination. This is to avoid supervisor reporting the child process (the one we are interested) in being reported as STOPPED when it is false
I think it is suboptimal to sleep self.grace_time unconditionally.  Say you have a grace_time of 5 seconds, and you send SIGTERM to the subprocess.  If  the subprocess is well behaved and and terminates almost instantly, you still wait 5 seconds before checking if it has terminated.  Basically you are delaying process termination by grace_time seconds, which is kind of annoying: makes process restart slower than it needs to be.

The correct approach is to have a while loop, like:
```python

deadline = time.time() + self.grace_time
r_pid = 0
while time.time() < deadline:
      r_pid, _ = os.waitpid(-1, os.WNOHANG)
      if r_pid != 0:
           break
      time.sleep(0.1)  # sleep for 100ms
 if r_pid == 0:
       # the child is still alive ...
       os.kill(pid, signal.SIGKILL)
```

This way you will notice that the subprocess terminated at most 100ms later.