Get rid of nasty disposable logic in Promise

We shouldn't actually need to retain the closure we execute.
Don't rely on the Promise staying alive to resolve
Fix deadlock in Promise.await()

Because observation must synchronize on the signal object, our
NSCondition nestled in here could deadlock with the signal’s private
GCD queue.

Use a dispatch semaphore for notifying instead, since we shouldn’t need
to grab a mutex just to notify the awaiter that a value was received.
Merge pull request #1529 from ReactiveCocoa/promise-improvements

Allow promises to resolve even after the promise itself deallocates