lambdify: Improved speed of generated code when unpacking arguments
lambdify: Improved speed of generated code when unpacking arguments

Improve performance of lambdify generated code when given arguments that
require unpacking.  Changes lambdastr so that the argument unpacking is done
at code-generation-time instead of at run-time.

For example,

>>> from sympy.utilities.lambdify import lambdastr
>>> from sympy.abc import w, x, y, z
>>> lambdastr([[x, y]], x * y)
'lambda _0: (lambda x,y: (x*y))(_0[0],_0[1])'

Output previously was

'lambda _0: (lambda x,y: (x*y))(*list(__flatten_args__([_0])))'

Other examples with mixed levels of nesting:

>>> lambdastr([[x, y], z], x * y + z)
'lambda _0,_1: (lambda x,y,z: (x*y + z))(_0[0],_0[1],_1)'
>>> lambdastr([[(w, x), y], z], w*(x * y + z))
'lambda _0,_1: (lambda w,x,y,z: (w*(x*y + z)))(_0[0][0],_0[0][1],_0[1],_1)'

kaushik94/sympy,kaushik94/sympy,kaushik94/sympy