AST: Don't assume two zero sized objects live at different addresses

Zero sized objects may overlap with each other or any other object.

This fixes PR21786.
Rename static functiom "map" to be more descriptive and to avoid
potential confusion with the std::map type.
DebugInfo: Correct location of aggregate assignment