Adding Jordan form and exponentiation for all matrices

This is mamueller's PR merged with the current master branch of SymPy.

Task to do:
* [x] `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).
* [x] Clean up the code
* [x] Remove useless comments
* [x] Remove unused variables
* [x] `Matrix.jordan( )` form ===> what is it supposed to return? `mamueller` returns `(J, P, Jcells)`, I'd rather return `(P, J)`.