Arbitrary types for default return values

Examples:
```objective-c
BOOL delegateReturnYES = [(id)[delegateProxy defaultReturn:@YES] exampleDelegateThatReturnsBOOL];

CGFloat delegateReturnsCGFloat = [(id)[delegateProxy defaultReturn:@(3.14f)] exampleDelegateThatReturnsCGFloat];
NSAssert(3.14f == delegateReturnsCGFloat, @"");

CGRect defaultRect = CGRectMake(10, 20, 30, 40);
CGRect rect = [(id)[delegateProxy defaultReturn:[NSValue value:&defaultRect withObjCType:@encode(CGRect)]]
                   exampleDelegateThatReturnsRect];
NSAssert(CGRectEqualToRect(defaultRect, rect), @"");
```