Add signal support

Signals can be used to indicate interactions between threads that aren't reading or setting the result.