Don't allocate memory in hashKey

Converting from string to []byte allocates a temporary slice.  If we
iterate the string's runes directly, we can avoid the extra memory
allocations.  This dramatically improves hash performance and
therefore Set and Delete performance in micro benchmarks.