Call initialize_clone with freeze: false if clone called with freeze: false
This makes it possible for
initialize_clone to correctly not freeze internal state if the
freeze: false keyword is passed to
clone is called with
freeze: true or no keyword, do not pass a second argument to
initialize_clone to keep backwards compatibility.
This makes it so that external libraries that override
initialize_clone but do not support the freeze keyword will fail with
ArgumentError if passing
freeze: false to
clone. I think that is better than the current behavior, which succeeds but results in an unfrozen object with frozen internals.
The attached patch implements this support and fixes related issues in set and delegate in stdlib.