Implement a more robust version of the runtime class modifications.

If a method doesn't exist on a class we now correctly add a new method
implementation for that class. Previously we were blindly swapping the
method. This would end up replacing the implementation of the super-
class, which could cause unexpected results if you're attempting to
debug something by swizzling a specific class's implementation of a
method (and not all classes in the family tree).
Add NISupportedInterfaceOrientationsForWindow. See docs for details.