Replace stubs we had to discriminate between temporaries and function arguments with actual construction contexts for arguments. Make them visible in the CFG. Which means that when there's an argument constructor in the CFG, it'll now be a CFGConstructor element (or a CFGCXXRecordTypedCall element if it's a temporary produced by a function call in C++17 where copy elision is mandatory) that will augment the construct-expression with the information about the constructed object - that it's argument #N of a certain function call.
On the analyzer side, the patch interacts with the recently implemented pre-C++17 copy elision support (D47616, D47671) in an interesting manner. If on the CFG side we didn't find a construction context for the elidable constructor, we build the CFG as if the elidable constructor is not elided, and the non-elided constructor within it is a simple temporary. But the same problem may occur in the analyzer: if the elidable constructor has a construction context but the analyzer doesn't implement such context yet, the analyzer should also try to skip copy elision and still inline the non-elided temporary constructor. This was implemented by adding a "roll back" mechanism: when elision fails, roll back the changes and proceed as if it's a simple temporary. The approach is wonky, but i'm fine with that as long as it's merely a defensive mechanism that should eventually go away once all construction contexts become supported.
Uhm. Will fix.