Fix __hash__ problem.

```__hash__``` must return an integer. The ```hashlib``` functions don't return anything that's simply converted to an integer, so I moved the MD5 hashing into the ```etag``` function and changed ```__hash__``` back to using the built-in ```hash``` function. I don't know if the difference between the hash and the ETag will be a problem. This is a quick fix for a serious problem that I caused.

I can't use Git on my test machine at the moment, so I had to copy the changes by hand into Github's editor. I made a mistake and I didn't test. I don't have access to my test machine right now, so I did this fix in Github's editor too. I triple-checked everything, but I can't test it right now.