Reset globally cached klass methods in Module#prepend_features
Reset globally cached klass methods in Module#prepend_features

Consider this example:

    class Parent
      def bar
      end
    end

    class Child < Parent
      def bar
        super
      end

      def foo
      end
    end

    Child.new.foo
    Child.new.bar
    # foo and bar are cached in the global cache

    prepended_module = Module.new do
      def foo
      end
    end
    Child.prepend(prepended_module)
    # foo is cleared from the global cache, but bar is not
    # Child hierarchy is now Child < IncludedModule(prepended_module) < IncludedModule(Child) < Parent

    Child.new.bar
    # When bar is looked up here, being still cached globally, Child#bar is the
    # result of the lookup (normally, it should be IncludedModule(Child)#bar).
    # Now when Child#bar is looking for its super, it goes to the first included
    # module, then the second included module, which has the same method table
    # as Child, returning Child#bar, causing non-ending recursive calls.

sferik/rubinius,ngpestelos/rubinius,ngpestelos/rubinius,ngpestelos/rubinius,kachick/rubinius,jsyeo/rubinius,sferik/rubinius,sferik/rubinius,sferik/rubinius,jsyeo/rubinius,kachick/rubinius,ngpestelos/rubinius,kachick/rubinius,kachick/rubinius,ngpestelos/rubinius,sferik/rubinius,kachick/rubinius,kachick/rubinius,sferik/rubinius,kachick/rubinius,ngpestelos/rubinius,ngpestelos/rubinius,jsyeo/rubinius,jsyeo/rubinius,kachick/rubinius,jsyeo/rubinius,jsyeo/rubinius,jsyeo/rubinius,sferik/rubinius