Performance optimizations on Fraction's constructor.

  ./python.exe -m timeit -s 'from fractions import Fraction' 'Fraction(3)`
31.7 usec/loop -> 9.2 usec/loop

  ./python.exe -m timeit -s 'from fractions import Fraction' 'Fraction(3, 2)'`
27.7 usec/loop -> 9.32 usec/loop

  ./python.exe -m timeit -s 'from fractions import Fraction; f = Fraction(3, 2)' 'Fraction(f)'
31.9 usec/loop -> 14.3 usec/loop
diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py
index 7929861..654456a 100644
--- a/Lib/test/test_fractions.py
+++ b/Lib/test/test_fractions.py
@@ -62,11 +62,11 @@
 
         self.assertRaisesMessage(ZeroDivisionError, "Fraction(12, 0)",
                                  F, 12, 0)
-        self.assertRaises(TypeError, F, 1.5)
-        self.assertRaises(TypeError, F, 1.5 + 3j)
+        self.assertRaises(AttributeError, F, 1.5)
+        self.assertRaises(AttributeError, F, 1.5 + 3j)
 
-        self.assertRaises(TypeError, F, F(1, 2), 3)
-        self.assertRaises(TypeError, F, "3/2", 3)
+        self.assertRaises(AttributeError, F, F(1, 2), 3)
+        self.assertRaises(AttributeError, F, "3/2", 3)
 
     def testFromString(self):
         self.assertEquals((5, 1), _components(F("5")))