Redid the hashing function to use siphash

The previous hash implementation did not work well with large hashes.
I've switched to use siphash with a random key which also prevents possible
hash collision attacks.

Some mapping size issues were also fixed.
sprintf -> snprintf
this_interactive() should be set for incoming GMCP
Possible NULL pointer deref
Minor code quality fixes