Asynchronous to synchronous function helpers 

The two additions (stepAndWait and exec) allow an asynchronous function to be tested in a synchronous manner. I am currently using it for Integration Testing a Restful web-service, with RestKit and AFNetworking as the underlying framework. 

Example:

I have the following helper class, 
     `@interface SyncSteps : NSObject <KWStep>`
In my test, I have an instance of SyncSteps
     `__block SyncSteps *syncSteps = [[SyncSteps alloc] init];`

test code:
```objective-c
UserSettings *userSettings = exec(syncSteps, @selector(getUserSetting:), nil);
[[theValue(userSettings.intervalSetting) should] equal:theValue(kDaily)];

[userSettings setIntervalSetting:kWeekly]
stepAndWait(syncSteps, @selector(setUserSetting:userSettings:), userSettings);

userSettings = exec(syncSteps, @selector(getUserSetting:), nil);
[[theValue(userSettings.intervalSetting) should] equal:theValue(kWeekly)]
```

SyncSteps functions: 

```objective-c
-(void) getUserSetting:(KWStepBlock)block  {
    [ProfileController
        getUserSettingsWithSuccess:^(UserSettings *userSettings){
            block(userSettings);
        }retry:^(int retryCount) {
            NSLog(@"retry %d", retryCount);
        } failure:^{
            NSLog(@"fail");
        }
    ];
}

-(void) setUserSetting:(KWVoidBlock)block userSettings:(UserSettings *)userSettings {
    [ProfileController setUserSetting:userSettings
        success:^{
            block();
        } retry:^(int retryCount) {
            NSLog(@"retry %d", retryCount);
        } failure:^{
            NSLog(@"fail");
        }
    ];
}
````

Thus, **all** functions which return nothing have **KWVoidBlock** as the **first** parameter, and **all** functions which return a value asynchronously have **KWStepBlock** as the **first** parameter.

Both exec and stepAndWait take either nil or an object as the second parameter, which is used to pass in parameters to the helper function. An array can be used if more than one extra parameter is needed.

e.,g, 
    stepAndWait(syncSteps, @selector(setUserSetting:userSettings:), @[userID, userSettings]);

    -(void) setUserSetting:(KWVoidBlock)block userSettings:(NSArray *)args 


Unfortunately the best mechanism for failing on the retry and failure blocks above, is to call block() or (nil) to prevent the test running forever.