OS Signals

Adds support for waiting on OS signals to diesel.

```python
def my_handler():
    diesel.signal(signal.SIGUSR1) # waits here
    something_to_handle_usr1()
    something_else()
```

Multiple `diesel.Loop`s can be waiting on the same signal. If a handler was already bound (outside of diesel, via `signal.signal()`), `diesel.signal()` raises `diesel.ExistingSignalHandler`. This prevents one from unwittingly wiping out an existing handler.

The signal handling support is present both event hubs.