Arbitrary types for default return values

Examples:
```objective-c
// Not only BOOL
BOOL delegateReturnYES = [(id)[delegateProxy defaultReturn:@YES] exampleDelegateThatReturnsBOOL];

// but also scalar types
CGFloat delegateReturnsCGFloat = [(id)[delegateProxy defaultReturn:@(3.14f)] exampleDelegateThatReturnsCGFloat];
NSAssert(3.14f == delegateReturnsCGFloat, @"");

// and even complex sructures
CGRect defaultRect = CGRectMake(10, 20, 30, 40);
CGRect rect = [(id)[delegateProxy defaultReturn:[NSValue value:&defaultRect withObjCType:@encode(CGRect)]]
                   exampleDelegateThatReturnsRect];
NSAssert(CGRectEqualToRect(defaultRect, rect), @"");
```