Fixed hashing function

The collision problem wasn't with CRC32 algorithm, as originally
thought. I erroneously used sizeof(key) instead of strlen(key). Since
key points to the first character, this resulted in my hashing function
only using the first letter of each key in its hashing logic. Also,
added debug logic to the hashing function for future use (in case I
decide to change the hashing function).
Made hashmap always take strings by value

This will make it much easier to deal with clean-up logic, avoid memory
leaks, and prevent hash entries changing on us form under our nose (in
case another function accidently overwrites the original container).
Changed hash behavior for non-existing entries

In dynamically-typed language, I'd prefer that hash raise an exception
when a hash table entry doesn't exist. In C, however, it's faster/easier
to deal with a NULL return value instead.
Tweaks to hashmap debug

I seem to be using the debugging functionality of this module a lot, in
one way or another. Figured I'd add a little more message separation to
it.
More bug fixes to hash map

One is a legitimate fix, the other is a temporary work-around around an
issue I don't have time to investigate now. It introduces a minor memory
leak, but the only time this leaking occurs is when loading
configuration that causes a setting in the hash to be overwritten. In
other words, this leak will not ever become significant unless you try
to load a config file with a million identical entries.
Rewrote Windows storage backend to use hashmaps

The storage for Windows version of Putty now happens using the newly
implemented hash table data structure. This should make loading/saving
more efficient as well as allow me to implement my Xresources overwrites
in a later commit.