Added the ability to cancel a promise

Objects which create promises now add themselves to a list of weakly
retained KSCancelable 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 <KSCancelable> objects in
its own list (which will in turn force them to call their own
cancelable 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 `cancelBlock` to run on all deferreds associated
with the cancelled promises.
Merge branch 'cancel_promises'