Uses a hash of the url for db locking to avoid errors on long urls

The current implementation uses the entire url of a page plus a few GET variables as the lock name. For deeply nested pages with long URLs (which is not ideal, but occasionally happens) the "SELECT IS_FREE_LOCK" query fails with an error that the identifier name is too long.

This PR uses an MD5 hash of the same (url + get variables) to normalize the length of the lock id string.