Improve signal handling

Signal handling has some problems:

* If a child process receives a signal and exits, the parent detects
  the child's control fd has been closed and sends a spurious event
  ({alcove_event, [pid()], ok}) to the erlang side.

* When the erlang side makes a call, it sends a message into the port
  then blocks in receive.

  If the child process doing the operation gets a signal, the situation
  becomes murky. The parent may:

  * notice the control fd closing and return 'ok'

    For example, if the process doing a getcwd/2 received a signal:

        {ok, Cwd} = alcove:getcwd(Drv, [Pid]) % badmatch: ok

    Even worse if the expected return value is 'ok'.

  * no response is sent back to the erlang side. The erlang process will
    block forever.

Make the signal handling more deterministic by:

* checking if the child has exited due to receiving a signal when the
  control fd is closed

* enabling termsig notification by default

* killing the erlang process if a signal is received during a call
  (similar to calls with a timeout set)

Killing the erlang process is still not correct. Since the erlang
process is linked to the gen_server, the port will be killed.