Issue55

Fixes #55.  Doesn't depend on any other PR's.

This modifies the Fraction class to use BigInteger values for the numerator and denominator, rather than using long integers. Also, in places where a double-precision float showed up Fraction's interface, a BigDecimal is now used instead.

This led to a number of changes to the methods' implementations. Without benchmarking, it's not clear how this change has affected the overall performance of the class. However, I did take steps to keep the implementation reasonably efficient. As a result, I ended up making many of the changes indicated by #47.

The method Fraction.pow(...) is currently limited, in that its implementation uses double-precision floats. This was purely based on expediency: Java provides a pow(...) function for doubles, but not for anything like the ratio of two BigIntegers. #63 seems to require for a better implementation of this method. Note that Fraction.pow(...) throws an exception if it encounters this numeric-range problem.