Comonadic functions for Signals

`Signal` can't be a real comonad because it requires side effects to `extract` values. However, this comes pretty close, and these are useful functions on their own as well.