I think there is an unrelated problem in this code, but I do not fully understand it. I'll try to summarize the problem:

1. An object (let's call it `myFoo`) of class `Foo` is swizzled and becomes a `Foo_RACSelectorSignal` by the swizzling logic here in `NSObject+RACSelectorSignal.m`.
1. Through entirely unrelated code, `myFoo` is swizzled again by KVO, becoming a `NSKVONotifying_Foo_RACSelectorSignal`.
1. Some caller sends a message to `myFoo`. `myFoo` implements this method dynamically, using standard Objective-C message forwarding. This ultimately results in sending `[myFoo methodSignatureForSelector:someSEL]`.
1. Due to the swizzling of that method, the `newIMP` created above is called. Its two arguments are `myFoo` and `someSEL`.
1. On line 134, `object_getClass(myFoo)` gets called, returning a Class `NSKVONotifying_Foo_RACSelectorSignal`.
1. On line 135, the `myFoo` still doesn't officially implement `-methodSignatureForSelector:`, so the Method that is returned is `NULL`.
1. So we go into the body of the `if` statement, which ultimately results in a call to `objc_msgSendSuper(myFoo, @selector(methodSignatureForSelector:))` on line 146.
1. Recur infinitely at step 4.

The involvement of KVO may be a red herring, though we only see the infinite recursion occur when the object has been swizzled by both ReactiveCocoa and KVO. It seems more likely that the problem surfaces simply by virtue of having been swizzled/extended twice – and that if the object is only swizzled once, then the `objc_super.super_class` member is assigned a valid Class that implements `-methodSignatureForSelector:`, and the flow of execution follows a happy path.