Reformat the Basic.rewrite docstring

Better indentation and additional explanatory doctests.
changed tan and cot expansion, eval, and rewrite

* added expand(trig=True) for tan(x+y), tan(n*x), cot(x+y), cot(n*x)
* call sin and cos now to eval tan,cot at rational multiples of pi
* provide .rewrite(pow) and .rewrite(sqrt) for tan and cot
* added tests for tan and cot expansions
* added tests for rewrite(pow) and rewrite(sqrt)
* fixed tests in geometry to avoid eval of tan
* fixed a test in pretty printing to avoid eval of tan(pi/5)
solve euler ordinary differential eqs in ode.py

* solve nth order linear homogeneous euler ODEs
* added hints, classifying code, and solving code
* added test function with a few examples
added trailing newline to test_ode.py
removed cruft print statement
rewrite of euler ode tests

* now use constant_renumber to avoid machine-specific fails
* fixed white-space issue (I hope)
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
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
fix quality and ode constant numbering bug

- added test for real root in euler ode solver
- revert some tests in test_dsolve_options()
improvements to code quality, with better sympy use
first draft 1dSHO
Merged tan_expand with latest version of master
merge euler_odes branch with latest version of master
completed documentation, corrected inline example
Added functionality to Q.real and Q.imaginary and fixed issue:2324

>>> ask(Q.real(x**3),Q.imaginary(x)&Q.real(2))
False
>>> ask(Q.real(x**2),Q.imaginary(x)&Q.real(2))
True
>>> ask(Q.imaginary(x**3),Q.imaginary(x)&Q.real(2))
True
>>> ask(Q.imaginary(x**2),Q.imaginary(x)&Q.real(2))
False
>>> ask(Q.real(x**y),Q.imaginary(x)&Q.imaginary(y))
True
>>> ask(Q.real(x**3),Q.imaginary(x)&Q.real(3))
False
>>> ask(Q.imaginary(x**(3*y)),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary((x*2)**(3*y)),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary(x**y),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary(I**y),True and Q.imaginary(y))
False

probably a fix to the issue:2324
Added functionality to Q.real and Q.imaginary and fixed issue:2324

>>> ask(Q.real(x**3),Q.imaginary(x)&Q.real(2))
False
>>> ask(Q.real(x**2),Q.imaginary(x)&Q.real(2))
True
>>> ask(Q.imaginary(x**3),Q.imaginary(x)&Q.real(2))
True
>>> ask(Q.imaginary(x**2),Q.imaginary(x)&Q.real(2))
False
>>> ask(Q.real(x**y),Q.imaginary(x)&Q.imaginary(y))
True
>>> ask(Q.real(x**3),Q.imaginary(x)&Q.real(3))
False
>>> ask(Q.imaginary(x**(3*y)),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary((x*2)**(3*y)),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary(x**y),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary(I**y),True and Q.imaginary(y))
False

probably a fix to the issue:2324
Added comparions to tuples

>>> Tuple(1,3)>=Tuple(-10,30)
True
>>> Tuple(1,3)<=Tuple(-10,30)
False
>>>
Added functionality to Q.real and Q.imaginary and fixed issue:2324

>>> ask(Q.real(x**3),Q.imaginary(x)&Q.real(2))
False
>>> ask(Q.real(x**2),Q.imaginary(x)&Q.real(2))
True
>>> ask(Q.imaginary(x**3),Q.imaginary(x)&Q.real(2))
True
>>> ask(Q.imaginary(x**2),Q.imaginary(x)&Q.real(2))
False
>>> ask(Q.real(x**y),Q.imaginary(x)&Q.imaginary(y))
True
>>> ask(Q.real(x**3),Q.imaginary(x)&Q.real(3))
False
>>> ask(Q.imaginary(x**(3*y)),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary((x*2)**(3*y)),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary(x**y),Q.imaginary(x)&Q.imaginary(y))
False
>>> ask(Q.imaginary(I**y),True and Q.imaginary(y))
False

probably a fix to the issue:2324