ZUNIONSTORE performance improvement

This is an experimental commit. Likely it causes a memory
leak. However, ZUNIONSTORE benefits from performance
improvements. Initial tests on ~70k keys went from 14s to ~200ms.
Add commentary for pull request

Attempt to document some of my thinking in comments. I'm sure this
should be fixed before the pull request goes through.
Make sure duplicate keys are weighted correctly.

When passing in duplicate keys to ZUNIONSTORE, it is expected their
aggregates count as many times as they are present.
Move support code to its own function.

zunionCloneAndFree is a new function which does as it says. It will
clone a ZSET and free the old copy. This is good for resorting a ZSET
in case it's values were directly modified.