Adding Jordan form and exponentiation for all matrices

This is mamueller's PR merged with the current master branch of SymPy.

Task to do:
[ ] `Matrix.diagonalize( )` and `Matrix.jordan_form( )` should return the same diagonal matrix if matrix is diagonalizable (as of now order of eigenvectors may not be the same).