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.

**To do:**

 - [x] Fix failing test
 - [x] Test lifetime behavior of `merge()`