Refactor ColdSignal initialization and subscription APIs

Resolves #1587.

Although slightly more verbose, I think this simplifies the components, and makes synchronous handling part of the _normal_ case, rather than the exceptional case.
Do we need this type annotation? Why is it optional when the closure's return value isn't?