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.
![](http://media.tumblr.com/d1b4fdbdd509e4179570632f62e24207/tumblr_inline_mhkezl5LKZ1qiw26m.gif)