Make str(Matrix) repr-able

This builds off the work from https://github.com/sympy/sympy/pull/1167. The
work there was too difficult to merge with master, so I just took the existing
printing functions from there and started from scratch.

I haven't updated all the doctests yet.

**Before**

```py
>>> Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
```

**After**

```py
>>> Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Matrix([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
```