Deep/recursive version of ``dict.update``.

    If a key is present in both dictionaries, and points to
    "child" dictionaries, those will be appropriately merged.

    :param overwrite: Whether to overwrite exisiting dictionary values

def _recursive_dict_update(dict_, other, **kwargs):
    """Deep/recursive version of ``dict.update``.

    If a key is present in both dictionaries, and points to
    "child" dictionaries, those will be appropriately merged.

    :param overwrite: Whether to overwrite exisiting dictionary values
    """
    overwrite = kwargs['overwrite']

    for key, other_value in iteritems(other):
        if key in dict_:
            value = dict_[key]
            if is_mapping(value) and is_mapping(other_value):
                _recursive_dict_update(value, other_value, overwrite=overwrite)
                continue
        if overwrite:
            dict_[key] = other_value
        else:
            dict_.setdefault(key, other_value)