Fix releaser bugs in CMapSet.

Before this change, doing this:

  map[key1] = value1
  map[dup(key1)] = dup(value1)

would have leaked one of the two copies of key1. The correct behavior is
to ensure that any time a releaser is present in a CMap, then any
corresponding parameter to CMapSet (that is, either the key or value) is
owned by the map and released when appropriate. There are some edge
cases such as the above, in which case the most natural behavior is to
release the first key1 and hold on to the second - and likewise for the
values.