improved tan and cot sum expansion formulas

* use symmetric polynomials
* sum formulas for tan and cot, implemented independently
* cleaned up rational*pi evaluation code
* removed I=sqrt(-1) import
* added test_tancot_rewrite_sqrt
* added tests for tan(x+y+z) and cot(x+y+z) expansion
* added test_tancot_rewrite_sqrt, with @slow decorator
* add slow decoration to test_trigonometry.py
Added new test for euler ode solver

* discovered a bug with the classifier
* added an example to test for this
Revert "wip remove hash"

This reverts commit 0bcac53b782b8cd76e58fdb709265c2a98cc3cec.

When the __hash__ is removed an error arises under Python 3.2:

sympy/physics/quantum/tests/test_gate.py:test_UGate ______________
4112  File "/home/travis/virtualenv/python3.2/lib/python3.2/site-packages/sympy/physics/quantum/tests/test_gate.py", line 48, in test_UGate
4113    assert qapply(u1*Qubit('0')) == a*Qubit('0') + c*Qubit('1')
4114  File "/home/travis/virtualenv/python3.2/lib/python3.2/site-packages/sympy/core/decorators.py", line 67, in __sympifyit_wrapper
4115    return func(a, sympify(b, strict=True))
4116  File "/home/travis/virtualenv/python3.2/lib/python3.2/site-packages/sympy/core/decorators.py", line 108, in binary_op_wrapper
4117    return func(self, other)
4118  File "/home/travis/virtualenv/python3.2/lib/python3.2/site-packages/sympy/core/expr.py", line 146, in __mul__
4119    return Mul(self, other)
4120  File "/home/travis/virtualenv/python3.2/lib/python3.2/site-packages/sympy/core/cache.py", line 85, in wrapper
4121    return func_cache_it_cache[k]
4122  File "/home/travis/virtualenv/python3.2/lib/python3.2/site-packages/sympy/core/basic.py", line 109, in __hash__
4123    h = hash((type(self).__name__,) + self._hashable_content())
4124TypeError: unhashable type: 'MutableDenseMatrix'

This is also reported in issue 880.
3433: less drastic correction
raise notimplemented on MatrixExpr.conjugate
add hash to SparseMatrix

For the record I do not think this is a good idea.
Sparse hash now includes shape
mprovements to euler equation solver

* broader pattern matching rules
* add tests to verify broader pattern matching
* update hints test for new hint, under better matchings
fix quality and ode constant numbering bug
Merge pull request #21 from mrocklin/matrices2

Matrices2
give more explicit error messages
add class name to hash value

This is what is done in Basic so I am doing the same here.
autopep8/pep8 mods
pep8 E702: one statement per line
Merge pull request #1570 from smichr/3433

3433: radsimp watches for pure radical in denominator
pep8 correction: don't include space around * and **
Add Jens Hedegaard Nielsen to .mailmap
Update version to 0.7.2
matrices: add test for args

There is a disturbing feature that ImmutableSparseMatrix needs rows and cols
to be defined in the _new method. Here is a record of what happens when
other things are tried:

If I don't assign rows (for example) in the `__init__` then tests fail

```
_______________ sympy/matrices/tests/test_matrices.py:test_cross _______________
  File "/sympy/sympy/matrices/tests/test_matrices.py", line 1971, in test_cross
    test(A.cross(B))
  File "/sympy/sympy/matrices/tests/test_matrices.py", line 1966, in test
    assert ans == M
AssertionError

________________________________________________________________________________
______________ sympy/matrices/tests/test_matrices.py:test_adjoint ______________
  File "/sympy/sympy/matrices/tests/test_matrices.py", line 1996, in test_adjoint
    assert ans == cls(dat).adjoint()
AssertionError
```

And if I put a print statement in the test_cross I get

```
  File "/sympy/sympy/matrices/tests/test_matrices.py", line 1972, in test_cross
    test(A.cross(B))
  File "/sympy/sympy/matrices/tests/test_matrices.py", line 1966, in test
    print type(ans), type(M), M.rows
  File "sympy/matrices/matrices.py", line 2806, in __getattr__
    raise AttributeError("%s has no attribute %s." % (self.__class__.__name__, attr))
AttributeError: ImmutableSparseMatrix has no attribute rows.
```
And that's weird because the `test_args` test (which tests for rows and cols) *passes*.

If I write it as a property like this

```
    @property
    def rows(self):
        return int(self.args[0])
```

I get a complaint from Sparse:

```
  File "sympy/matrices/tests/test_matrices.py", line 1970, in test_cross
    A = cls(a)
  File "sympy/matrices/sparse.py", line 85, in __init__
    self.rows = r
AttributeError: can't set attribute
```

So...I don't understand what is going on. What is there works but it
probably can be done in some better way.
matrices: test all subs