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``
Issue 3879: fixed docstring error when pyglet is install.
Lambdify uses Dummy

Within lambdify, lambdastr specifically, all over the provided args are
replaced with Dummy symbols within the expr to be evaluated. This allows for
substitution of things with unfriendly names, such as AppliedUndef's (e.g.,
x(t)).

Before this failed:
  >>> t = symbols('t')
  >>> x = Function('x')
  >>> y = x(t)
  >>> lambdify(y, 2*y)

Now the above works.
Added test for lambdify changes

Now tests that providing an AppliedFunction as an arg into lambidfy actually
works.
Rewrote the changes to lambdify

Now in lambdastr, the default behavior is not to dummify everything; it is a
kwarg option. When lambdstr is called by lambdify though, dummify is set to
True. The justification for this is that if lambdastr is called directly by a
user, they might want to observe the output, in which case all Dummy symbols
would be confusing; if lambdify calls lambdastr, they won't be able to see the
output, and the lambdastr readability doesn't matter, making the increased
range of input arguments worth it.

In addition, translations from ImmutableMatrix -> matrix needed to be added, as
calling sympify on a Matrix results in an ImmutableMatrix.

A few tests were added to ensure that the new lambdify functionality works.
Rewrote lambdify for better usage of dummies

Now, dummies are only substituted in when a numerical output is going to be
used. Additionally, dummies are only substituted for args which are symbols or
functions. Tests added to make sure error is raised for incorrect usage.

Also, instead of using subs, it now uses xreplace.
App engine compatibility: fail on subprocess import
Merge pull request #2218 from lidavidm/app_engine

App engine compatibility: fail on subprocess import
Merge pull request #2148 from pernici/factor1

 improved factorization of integer polynomials
Merge pull request #1920 from gilbertgede/lamdify_dummify

Lambdify uses Dummy symbols
Merge pull request #2216 from eriknw/3879_pyglet_doctest

Issue 3879: fixed docstring error when pyglet is install.
Add Erik Welch to the AUTHORS/aboutus. Welcome to SymPy!
Merge branch 'master' into 2695_pretty_print_fractions