optimized loop over subsets in ``dup_zz_zassenhaus``

In this commit factorization is much faster than in master when
the loop over the subsets is long; e.g. with

``minpoly(S('sqrt(1 + 2**(1/5)) + 2**(1/5)*sqrt(1 + 2**(1/5))'), x)``

the resultant has degree 100; it is factored 150x faster in this commit
than in master; the loop over subsets has 6e5 cases, but only 1000
of them pass the test on the constant term.
In this commit it is attempted to choose ``p`` such that there are
fewer factorizations over Z_p[x]. There is a small overhead for this.
faster ``swinnerton_dyer_poly`` using ``minimal_polynomial``
added explicit cases ``n=1,2,3`` in ``swinnerton_dyer_poly``
in ``_test_pl`` changed the case ``q == 0`` to allow factorization with
``fc = 0``
Merge pull request #2148 from pernici/factor1

 improved factorization of integer polynomials