Stop using hash() because of bugs wrt pyrex 0.9.8.5
Rather than going directly to the Py_TYPE() object, I also use PyObject_Hash() everywhere now. This simplifies the code a little bit, as I can declare it returns -1 as an exception, rather than having to manually check the return value.
What is really strange is that pyrex 0.9.7.2 gets it right, strange regression to have. cython 0.11.3 also gets it right, but I don't know that all versions of cython handle it correctly, either.
The main problem is that we are mixing, and then comparing 'other_hash = this_hash'. If we always used the 32-bit form, we would be okay for our purposes, or always use the 64-bit form. I'm focusing on the latter.