Tom, here's something to experiment with. I haven't tested it extensively:

  class Module
    alias :old_include :include
    def include other
      old_include other
      if self.class == Module
        this = self
        ObjectSpace.each_object Module do |mod|
          mod.module_eval do include this end if mod < self
        end
      end
    end
  end

  module Z
    def x; "x"; end
  end

  module Enumerable
    include Z
  end

  a = [1,2,3,4,5]
  p a.x  # => "x"

Regards,
Pit