Fix a couple of bugs exposed by the new __index__ code.  The 64-bit buildbots
were failing due to inappropriate clipping of numbers larger than 2**31
with new-style classes. (typeobject.c)  In reviewing the code for classic
classes, there were 2 problems.  Any negative value return could be returned.
Always return -1 if there was an error.  Also make the checks similar
with the new-style classes.  I believe this is correct for 32 and 64 bit
boxes, including Windows64.

Add a test of classic classes too.
diff --git a/Lib/test/test_index.py b/Lib/test/test_index.py
index b224a50..1081b53 100644
--- a/Lib/test/test_index.py
+++ b/Lib/test/test_index.py
@@ -181,8 +181,8 @@
         self.assertEqual(self.pos.__index__(), self.pos)
         self.assertEqual(self.neg.__index__(), self.neg)
 
-    def test_getitem(self):
-        class GetItem(object):
+    def _getitem_helper(self, base):
+        class GetItem(base):
             def __len__(self):
                 return maxint
             def __getitem__(self, key):
@@ -195,6 +195,13 @@
         self.assertEqual(x[self.neg:self.pos], (-1, maxint))
         self.assertEqual(x[self.neg:self.pos:1].indices(maxint), (0, maxint, 1))
 
+    def test_getitem(self):
+        self._getitem_helper(object)
+
+    def test_getitem_classic(self):
+        class Empty: pass
+        self._getitem_helper(Empty)
+
     def test_sequence_repeat(self):
         self.failUnlessRaises(OverflowError, lambda: "a" * self.pos)
         self.failUnlessRaises(OverflowError, lambda: "a" * self.neg)