MatrixElements and Exprs

Alternative to https://github.com/sympy/sympy/pull/2093

Fixes https://code.google.com/p/sympy/issues/detail?id=3814

MatrixExprs make different assumptions about their trees than Exprs.  They are both more and less strict in different ways. 

MatrixElement is an Expr that contains a MatrixSymbol, injecting one type of tree inside the other.  This raises some issues which I've dealt with here.