Make UndefinedFunction.__new__ accept the full type() function signature
Make UndefinedFunction.__new__ accept the full type() function signature

This is required to make pickling work with cloudpickle (in Python 3). It also
makes it possible to create an undefined function directly with

class f(AppliedUndef, metaclass=UndefinedFunction):
    __module__ = None

(although this is not recommended)

I've also cleaned up UndefinedFunction.__new__ a bit (using super() instead of
calling BasicMeta directly, setting __module__ in the module dictionary).

This fixes #11692

yashsharan/sympy,jaimahajan1997/sympy,madan96/sympy,jaimahajan1997/sympy,skidzo/sympy,chaffra/sympy,kaushik94/sympy,madan96/sympy,kaushik94/sympy,yashsharan/sympy,skidzo/sympy,yashsharan/sympy,jaimahajan1997/sympy,kaushik94/sympy,chaffra/sympy,madan96/sympy,chaffra/sympy,skidzo/sympy