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.
Suggested fix for __int__ function of class PythonRational in order to enable it to work with large numerators/denominators.
Add a test for the QQ integer conversion
Also test for overflow

Previously this would raise:

OverflowError: long int too large to convert to float

Now it just works.
Merge pull request #2541 from certik/HeinerKirchhoffer-fix-root-isolation-bounds

Heiner kirchhoffer fix root isolation bounds