Add the ability to cancel a promise

Objects which create promises now add themselves to a list of weakly
retained <KSCancellable> objects on the child promise. If the owner of
a KSPromise calls `cancel` on the promise, the promise will
iteratively call `cancel` on all of the <KSCancellable> objects in
its own list (which will in turn force them to call their own
cancellable objects).

The net effect is that calling cancel on a promise will mark it as
cancelled, mark all of its parent promises as cancelled, and will
cause an optional `-whenCancelled:` block to run on all deferreds
associated with the cancelled promises.