Fix Issue 3727 (ufuncify + erf)
Staging the infra of a basic PDE Solver
Minor Change
Test a bug in Piecewise._eval_subs
added ``minimal_polynomial_sq`` and ``nthroot``

``minimal_polynomial_sq`` returns the minimal polynomial for the
``nth-root`` of a sum of surds.

``nthroot`` computes a real ``nth-root`` of a sum of surds.
Added util.py- helper functions
Made all changes except ode_order
modified ``minimal_polynomial`` to call ``minimal_polynomial_sq``;
solved issue 2895
Improved documentation and cleaned up test failures
trace/determinant(x) > 0 if x is positive_definite
_eval_rewrite and doit safe for non-Basic args
add MatrixElement
MatMul._entry simplified due to MatrixElement
diagonal elements of pos-def matrix are positive
use sympy.matrices.expressions.transpose.transpose
remove X.T -> X if X is symmetric
remove determinant of singular matrix check
refactor blockmatrix 2x2 inverse
unitary and normal predicates
add matrix fft