The issue here is that we want to first merge our stack of config files, and
then we want to evaluate substitutions. But if two substitutions both expand
to an object, we might need to merge those two objects. Thus, we can't ever
"override" a substitution when we do a merge; instead we have to save the
stack of values that should be merged, and resolve the merge when we evaluate
substitutions.
The issue here is that we want to first merge our stack of config files, and then we want to evaluate substitutions. But if two substitutions both expand to an object, we might need to merge those two objects. Thus, we can't ever "override" a substitution when we do a merge; instead we have to save the stack of values that should be merged, and resolve the merge when we evaluate substitutions.