modify assumptions

    finite, infinite and nonzero are now complex

    Formerly, infinite was just a way to day finite=False but
    saying that doesn't tell you what something *is*, only
    what it is not. Now these facts/attributes always refer to
    complex numbers. This is also how nonzero works: it does not
    mean zero=False (which could refer to anything) it means complex & !zero.

    irrational, rational and integer are now finite; they do not include oo

    real still does include oo so it is neither finite nor infinite and
    both attributes are None

    All properties of NaN are False except for is_number (which is True
    but is not part of the assumption system).

    A significant amount of fixing was done to make the _eval_is_* methods
    work with these new definitions.
add docstring to as_dummy()
make Mul._eval_is_real aware of complex=1,real=0,imaginary=0 terms
make Add._eval_is_* methods infinite-aware
randomize traversal of facts

This may help to expose errors in _eval_is routines that apply
constraints to the solution that are not in the prerequisites for
a fact. (see next commit)

Conflicts:
	sympy/core/assumptions.py
let _unevaluated_Add collect numbers, too
cleanup some bounded usage and arg traversals
do not add tests that are not prereq

It is important not to add prerequisites to a result that are
not consistent with the assumption rules. This can lead to facts
being missed, something that will be intermittent in nature depending
on the order in which the assumptions are traversed to resolve the fact.

for example:

>>> from sympy.core.assumptions import _assume_rules as R
>>> print filldedent(R.prereq['imaginary'])

set(['real', 'prime', 'irrational', 'antihermitian', 'nonpositive',
'composite', 'zero', 'integer', 'odd', 'even', 'commutative',
'positive', 'noninteger', 'negative', 'nonnegative', 'complex',
'rational'])

Having an answer to nonzero is not a prerequisite of knowing the
`imaginary` fact. The same is true for antihermitian.

>>> print filldedent(R.prereq['antihermitian'])

set(['imaginary'])
only allow super call if self is real
flatten Add at start of relevant _eval_is_* routines
8081 negative ints (all but -1) are composite