(#20200) Add a recursive merge function.

Issue #20200 notes that the merge function does not
support nested hashes.

To prevent unintended side effects with changing merge,
add a deep_merge function instead.
Merge branch 'fix/master/add_recursive_merge'

* fix/master/add_recursive_merge:
  (#20200) Add a recursive merge function.

Closes GH-189

This patch changes the original pull request to draw in the overlay function as
a Proc and make use of Hash.merge {} for resolving key conflicts.