[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.
add nC and nP to combinatorial numbers
new _gen_poly algorithm
add stirling function and nT for partition enumeration
add reduced Stirling numbers of 2nd kind
fix errors and add more tests for coverage.
nT does not take negative argument for n
do not use lowercase in Py 3
better nT routine for integers
better multiset partition counting routine
restore simple multiset_partition counting

When a smart multiset_partitions generating routine is in place
it will be faster than what is here. I'm not aware of any other
way to solve this problem without actually generating the multisets.
Whatever work one does to avoid doing that seems to cost more than
simply generating the partitions of the multiset. The
one exception is in the counting of partitions of length 2 which can
be done very quickly. (There is perhaps some efficiency that can be
obtained for the case when there are only two different elements in the
multiset, e.g. aaabb, but for simplicity I have not included that.)
Issue 3428: Passed tolerance to _real_to_rational if rational=True in nsimplify and implemented it.
issue 3428: fixed trailing whitespace error in test_simplify.py