Refactor ColdSignal.init, start(), and Subscriber

Subscribers are now nothing special—the serialization behavior lies
within start(), and the disposable is external. We also make sure to
pass in disposables before any work begins, so synchronous work can be
canceled too.
Don't generate any values if disposed up-front
Replace every Subscriber and SinkType with SinkOf

Using a protocol type (here, SinkType) in start() causes no end of
typechecker problems. If we use SinkOf<Event<T>> everywhere instead,
we’re fine.

Consequently, a custom Subscriber type becomes a PITA. Refactor it into
a free function that can create the proper SinkOf<T>.
Add startWithDisposable() convenience function
Refactor users of ColdSignal for the new API
Flip so the lower-level function is startWithSink

start() is what most consumers will probably want, so make it as
convenient as possible. This also means removing the disposable
argument, which is really only useful when constructing signal
operators.
Refactor startMulticasted() to be disposable
Merge pull request #1590 from ReactiveCocoa/improve-synchronous-cold-signals

Refactor ColdSignal initialization and subscription APIs