is_zero and free_symbols modifications

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.
move Integral.is_zero to _eval_is_zero
make log._eval_is_zero more naive: no simplification
remove redundant is_number routines
change is_zero to _eval_is_zero for Sum and Product
make Product and Sum is_number more naive

is_number is a yes or no question equivalent in answer to
not foo.free_symbols. It should not use evaluation or assumptions
to answer the question.
update comment [skip ci]
consolidate is_number and free_symbols into base classes
remove Integral.is_number; use super class routine
for speed, put is_number with low level classes
remove log.is_zero routine
clean up is_number definitions
Merge pull request #7859 from smichr/mod4

is_zero and free_symbols/is_number modifications