As an improvement over D42699 and D42700, this unwraps ExprWithCleanups surrounding immediate constructors of variables which take temporaries as constructor arguments (such as iterator i = begin() - a copy constructor accepts a temporary here).
With this change, we're fully ready to make use of construction contexts in the analyzer (in the next patch). Once we do, the plan is to be adding more and more construction contexts for the new cases that were not previously supported by the analyzer.
Minor refactoring involved.