Keep HotSignals alive for as long as their generators are

Generalizes #1589 to _all_ `HotSignal`s, and resolves #1605.

It feels a little dangerous to make it so easy to keep a `HotSignal` alive, but the alternatives are all terrible. I'm convinced that the examples in #1605 and #1588 (now encoded as unit tests) should work as-is, so this seems like the simplest way to accomplish that.
Most annotations are. :trollface: