clarify is_number related issues; notes in test_basic

evalf now has a keyword `literal` that will return None if the
expression couldn't be evaluated to a literal a + I*b type number
where a and b are (real) Numbers. This is like using the strict
flag and catching the PrecisionExhausted error, but it will also
avoid the evaluation if there are unevaluable objects (like
AppliedUndef) present.

Notes:

is_zero is needed to identify alternate *trivial* forms of 0 as
in Integral(0, ...). It should never do more than look for a literal
0 someplace. For this reason, the Integral.is_zero routine was modified
and the advanced processing for other mostly trivial cases of an integral
being 0 was moved to the doit method.

foo.is_number is equivalent to not foo.free_symbols but is a faster way of
arriving at that answer because is_number will fail if a single free
symbol is encountered. For this reason, the Integral.is_number routine
was modified.

foo.free_symbols should give any free symbols in the expression *as
written* without any regard to whether those symbols will disappear after
simplification of some sort. The test for is_zero was removed from
expr_with_limits calculation of free symbols for this reason.

Other comments about the rationale of these changes are in the test
suite (esp in test_basic) so that anyone changing the behavior will be
sure to see the desired state of affairs.
7619: fix recursion error on nested Min

Alternatively, instead of checking that the there was no AppliedUndef,
if the expression involving the Min were denested as 2*Min(a,b)->Min(2*a,2*b)
the recursion error would not have occured, either...but one might not
want the unnested expression.
simplify Integral.free_symbols calc; clarify test

Also

    is_zero is needed to identify alternate *trivial* forms of 0 as
    in Integral(0, ...). It should never do more than look for a literal
    0 someplace. For this reason, the Integral.is_zero routine was modified
    and the advanced processing for other mostly trivial cases of an integral
    being 0 was moved to the doit method.
add check for is_zero in re and im
7642: KroneckerDelta judicious evalf; = 0 for nonzero diff