[solvers] implement minsolve_linear_system.
[simplify] Improvements to ratsimpmodprime.

Namely:

- fix a bug where denominators would be dropped
- add a parameter quick, and use solve(.., minimal=True, quick=True)
- if quick is not True, collect all solutions of the minimal total degree (but
  differing individual degrees) and use minsolve_linear(quick=False) to find
  the best
- make staircase() much more efficient
[functions/elementary] Implement cosh(x+y) sinh(x+y) expansion.
[polys] Fix eject().

Note that the changes in densebasic are most easily tested through the
polytools wrapper classes.
[simplify] Start trigsimp_groebner.

This is a function which simplifies trigonometric and hyperbolic fraction using
the groebner basis based algorithm ratsimpmodprime.
[simplify/trigsimp_groebner] Implement polynomial simplification.

This is a faster, but less good version. Also speed up some tests.
Better integration of trigsimp_groebner with rest of trigsimp.
[simplify] Implement "deep" for trigsimp with groebner.
Implement known values of Si, Ci, Shi, Chi at oo and -oo
Tests for values of Si, Ci, Shi, Chi at oo and -oo
Replace 0 by S.Zero
sympy_parser: don't change attribute access into Symbols (#2663)

Only fixes the issue relating to attribute access, not keyword
arguments.
sympy_parser: don't change keyword arguments into Symbols

Fixes #3423 and #2663.
sympy_parser: Add tests for keyword args and attributes
Refactor sympy_parser
sympy_parser: Update tests to reflect new API
parse_expr: Allow override of globals
Add imports for tests
sympy_parser: improve documentation
Revert to old transformation API