Objective-C promises, modeled after Q Promises for Node.js.