This patch enables context-sensitive analysis of multiple different calls to the same function (see the ContextSensitiveSetBothTrueAndFalse example in the TransferTest suite) by moving the DeclToLoc, ExprToLoc, and ThisPointeeLoc fields (along with their associated methods) from the DataflowAnalysisContext class into a new StorageFrame class, replacing them with a Frames map keyed by std::vector<const CallExpr *>. The only other change necessary was to replace the copy-assignment with a call to the new popCall method on Environment, which std::moves some fields but specifically does not move DeclToLoc and ExprToLoc from the callee back to the caller.
This approach still does not yet work for recursive calls, such as the example pointed out by @xazax.hun in D130306#3670259; that should be addressable in a followup by limiting the CallString depth.