Moving async stuff to use Promise pattern

Adds MWDeferred and MWPromise classes to MWApi library, loosely based
on jQuery's deferreds.

This allows consolidating callbacks and making indentation for callbacks
a little more consistent. In theory also allows easy chaining, but
that gets ugly in Objective-C with all the brackets so not doing that yet.

Example usage of a deferred from the provider:

- (MWPromise *)startSomething
{
  MWDeferred *deferred = [[MWDeferred alloc] init];
  [something do:stuff completion:^(NSData *foo, NSError *err) {
    if (err) {
      [deferred reject:err];
    } else {
      [deferred resolve:err];
    }
  }];
  return [deferred promise];
}

...

with a consumer like this:

MWPromise *something = [widget startSomething];
[something done:^(NSData *data) {
  // do something with data
}];
[something fail:^(NSError *err) {
  // report or pass error up the chain
}];

This is much easier to indent than the previous pattern:

[something doneOnCompletion:^(NSData *data) {
             // how much do I indent here?
           }
                     onFail:^(NSError *err) {
                       // what about here?
                     }
];

and makes the method definitions much less verbose.

I have the horrible suspicion I'm leaking memory somewhere, but
XCode's static analysis isn't freaking out so... hoping this isn't
insane. :)