automaticly distribute ExprWithLimits across Eq's

- add new test for Sum and Product
requested revisions
add quick solution for linear systems of equations

The routines were added to the solvers.py instead of matrices since
it is in the context of solving symbolic matrices that these are
most applicable.
use generate_bell for det_perm; work with Sparse, too

self -> M

simplify=False is used in the tests. Without this, the
times taken increases significantly. (e.g. 48 seconds
instead of 2 seconds for the system of issue 2015.)

some refactoring of code was also done.
solve_univariate_inequality shouldn't assume solve output is sorted

    closes #2785
Merge pull request #2786 from skirpichev/gh2785

solve_univariate_inequality shouldn't assume solve output is sorted
solve_univariate_inequality: don't assume that solve returns real solutions

    closes #2794
do not use None in factor_list

The None tracked a term that should not be extracted
if the exponent assumptions didn't allow. But this has
to be handled differently since the "k" value is needed
if the assumptions do allow.
Merge pull request #2791 from smichr/2787

do not use None in factor_list
Merge pull request #2795 from skirpichev/gh2794

solve_univariate_inequality: don't assume that solve returns reals
merge with master
Merge pull request #2798 from smichr/auto

Auto
Merge pull request #2755 from smichr/mat

add quick solution for linear systems of equations
Merge branch 'master' of https://github.com/sympy/sympy into imageset