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.