polys: Use rational numbers instead of floats to avoid OverflowError

In [1]: a = (x**45 - 45*x**44 + 990*x**43 - 1)

In [2]: b = (x**46 - 15180*x**43 + 9366819*x**40 - 53524680*x**39 + \
   ...: 260932815*x**38 - 1101716330*x**37 + 4076350421*x**36 - \
   ...: 13340783196*x**35 + 38910617655*x**34 - 101766230790*x**33 + \
   ...: 239877544005*x**32 - 511738760544*x**31 + 991493848554*x**30 - \
   ...: 1749695026860*x**29 + 2818953098830*x**28 - 4154246671960*x**27 + \
   ...: 5608233007146*x**26 - 6943526580276*x**25 + 7890371113950*x**24 - \
   ...: 8233430727600*x**23 + 7890371113950*x**22 - 6943526580276*x**21 + \
   ...: 5608233007146*x**20 - 4154246671960*x**19 + 2818953098830*x**18 - \
   ...: 1749695026860*x**17 + 991493848554*x**16 - 511738760544*x**15 + \
   ...: 239877544005*x**14 - 101766230790*x**13 + 38910617655*x**12 - \
   ...: 13340783196*x**11 + 4076350421*x**10 - 1101716330*x**9 + \
   ...: 260932815*x**8 - 53524680*x**7 + 9366819*x**6 - 1370754*x**5 + \
   ...: 163185*x**4 - 15180*x**3 + 1035*x**2 - 47*x + 1)

In [3]: intervals(a*b)
Out[3]: [((0, 1/2), 1), ((2/3, 3/4), 1), ((3/4, 1), 1), ((6, 7), 1), ((24, 25), 1)]

Fix suggested by Heiner Kirchhoffer.
Made GA_Printer robust against exception abort.

GA_Printer is now a context handler.
If used in that way, it will clean up after itself even in the presence of exceptions.

Made all uses of GA_Printer use the "with" form.
Suggested fix for __int__ function of class PythonRational in order to enable it to work with large numerators/denominators.
Added issue numbers to @deprecated annotations.
Issue and version numbers corrected.
Define all the __rop__ logical operators on Boolean

Now things like True & x work.
Move rcall from Expr to Basic

This lets it work on non Expr objects, such as booleans, like And(Q.real,
Q.positive).
Marked sympy.galgebra.ga.ga_print_on/off as functions for interactive use.

Updated all uses of these functions to use the GA_Printer() context handler.
test_plot.py: Cleanup temporary files after test completion
4023: better handling of exponents in nfloat

When nfloat encountered RootOf instances the method
it used to leave the exponents alone didn't work because
RootOf instances don't allow non-univariate expression.
So RootOf(x**dummy_1 + x**dummy_2, 0) fails. The handling
of exponents is now handled in a more straightforward
manner and a test expression was added to solve's suite.
handle RootOf on their own in nfloat
Add a test for the QQ integer conversion
Use _argset in preorder_traversal

This makes atoms much faster on LatticeOps (like And and Or), because it
avoids ever computing the sorted .args, which are internally stored as a
frozenset.  This is implemented as the default, because the docstring says
that if keys=False then no order is guaranteed, but if this becomes an issue,
we should perhaps make keys=True the default and set it to False in atoms (the
order never matters in atoms because it returns a set).
Comment out the failing test
Also test for overflow

Previously this would raise:

OverflowError: long int too large to convert to float

Now it just works.
Merge pull request #2544 from certik/master_fix

Comment out the failing test
Merge pull request #2541 from certik/HeinerKirchhoffer-fix-root-isolation-bounds

Heiner kirchhoffer fix root isolation bounds
Merge pull request #2490 from toolforger/contextualize-ga-printing

Made GA_Printer robust against exception abort
Merge pull request #2507 from asmeurer/rbool

Define all the __rop__ logical operators on Boolean
Merge pull request #2512 from asmeurer/rcall-Basic

Move rcall from Expr to Basic