def add_instance_variable( name , type )
      raise "No nil name" unless name
      raise "No nil type" unless type
      hash = to_hash
      hash[name] = type
      return Type.for_hash( object_class , hash)
    end
def add_instance_variable( name , type )
      raise "No nil name" unless name
      raise "No nil type" unless type
      hash = to_hash
      hash[name] = type
      return Type.for_hash( object_class , hash)
    end
add the name of an instance variable
 Type objects are immutable, so a new object is returned
 As types are also unique, two same adds will result in identical results