Let {Function,Expression,Constant}.__str__() return the name of the Variable.
With this change will:

  info(u); print u

display different strings. info calls u.str() which is slightly more verbose.
Now one can give a GenericFunction a unique name and use str(u) in a hash to
identify it.