Fix for undefined keys & values

Without this fix, one can’t use `undefined` as a key. `hash.get(undefined)` returns the whole object instead of the key, and `hash.del` called on a key with an `undefined` value would not delete this key.

I also simplified the internal `hash` function instead of doing a pull request just for that.

Edit: from the docs you support only string keys so my `.get` fix isn’t completely relevant here. There also have issues with special keys, suck has `toString` or `prototype`, but you’d need to change your internal representation to handle these special cases (e.g. internally prefix keys with an underscore).