Does this cause a failure if one writes

```rust
let mut sig = Signal::new();
sig.register(Interrupt);
sig.unregister(Interrupt);
sig.recv();
```

(Since `unregister` will cause the Chan at the other end of this Port to be closed, making the `recv` `fail!()`.)

Maybe this should use `try_recv` and return `Option<Signum>`?