backend: use md5 instead of the built-in hash() function to calculate a request's hash

Not only does this resolve issues with hash() behaving differently on different machines (sometimes producing 64bit hashes and sometimes 32bit ones), but it is also upward-compatible with Python 3.* where hash() will be randomized to prevent some replay-attacks.