Give decycle caller chance to replace values at path

Give decycle's caller an opportunity to replace
the value at any given JSONPath as derez traverses
objects.

This change gives decycle a second argument
allowing the caller to provide a function which
may transform values arbitrarily.

One example use might be giving decycle awareness
of an object's preference for representing itself
in a decycled structure, especially giving
anObject.toJSON() a chance to run.