Element wise

Hi I have been a little busy all the while. I have just compleated the code for Element wise matrix functions. The PR I have submitted earlier was very confusing and was unable to rebase it, so I am writing a new one.


    >>> from sympy import MatrixSymbol, Lambda, Symbol, symbols, cos, ElemWise
    >>> A = MatrixSymbol('X', 3, 3)
    >>> B = MatrixSymbol('Y', 3, 4)
    >>> x = symbols('x')
    >>> z = Symbol('z', real=True)
    >>> f = Lambda(x, z*x)
    >>> g = Lambda(x, cos(z*x)**2)
    >>> L = ElemWise(ElemWise(A*B, f), f).evaluate()
    >>> O = ElemWise(ElemWise(A, g), f).evaluate()
    >>> T = ElemWise(ElemWise(A, f), g).evaluate()
    >>> L[1, 1]
    z**2*(X[1, 0]*Y[0, 1] + X[1, 1]*Y[1, 1] + X[1, 2]*Y[2, 1])
    >>> O
    ElemWise(X, z*cos(x*z)**2)
    >>> T
    ElemWise(X, cos(x*z**2)**2)

I don't see the reason to ensure that `f` is a function of `x`. With your current setup, this only requires that `f` is a function of one variable. Upon init, you should verify that `len(f.variables) == 1`. Then `f` can be defined using whatever variable the user wants, as long as it's a function of 1 variable.