Add 'li(z)' to the heuristic Risch integration

With this addition we can now compute some very
simple integrals involving li(z) like:

>>> integrate(li(z), z)
z*li(z) - Ei(2*log(z))

>>> integrate(li(a*z), z)
z*li(a*z) - Ei(2*log(a) + 2*log(z))/a

The code should be able to compute also this one:

>>> integrate(li(a*z**b), z)

but is seems to take ages ...
Improve the pattern for 'li(z)'

By generalizing the pattern we can now do this:

>>> integrate(li(a*z**2), z)
z*li(a*z**2) - z*Ei(3*log(a)/2 + 3*log(z))/(sqrt(a)*sqrt(z**2))

which is correct:

>>> diff(_, z)
-3*a*z**3/((3*log(a)/2 + 3*log(z))*sqrt(z**2)) + 2*a*z**2/log(a*z**2) + li(a*z**2)

>>> simplify(powdenest(_, force=True))
2*a*z**2/log(a*z**2) - 2*a*z**2/(log(a) + 2*log(z)) + li(a*z**2)

>>> pprint(_)

       2               2
  2⋅a⋅z           2⋅a⋅z           ⎛   2⎞
───────── - ───────────────── + li⎝a⋅z ⎠
   ⎛   2⎞   log(a) + 2⋅log(z)
log⎝a⋅z ⎠

as far as these logs do not mess up branch cuts.

However, we can not do the general case although the pattern is
strong enough. Trying:

>>> integrate(li(a*z**b), z)

we get a:

RuntimeError: maximum recursion depth exceeded while calling a Python object
Fix some docstring math function names.
Generalize the rewrite of Ei into li

The formula is only correct for a subset of the complex arguments
but we can currently not reason about the range of arguments:

 ask( Q.real(f(x)), Q.real(x) )

or compute if:

 -pi < imag(f(x)) <= pi

for given f, for example f(x) = 2*log(x)