Switch to Undefined = Module.new.freeze

A new module instance provides slightly less API than a new class
instance (specifically, it doesn’t expose .new)

“Ideally” we would do Undefined = BasicObject.new but that doesn’t
really play nice with #inspect