the constructor accepts a vector of pairs of ProjectionName+ABT node, plus a final ABT node, that are stored in the flat vector inherited from ABTOpDynamicArity, plus a dedicated std::vector<ProjectionName>
add the new type to the known walkers, using the logic used for the Let node as a template:
SBEExpressionLowering
ExplainPrinter
LastRefsTransporter
ExpressionConstEval
TypeChecker
Vectorizer
ValueLifetime
add unit tests for the walkers to test the new logic
change makeLet(sbe::FrameId frameId, optimizer::ABTVector bindExprs, optimizer::ABT expr) so that it creates the MultiLet node if the feature flag is set to true
revisit the code in gen_expression.cpp that could be rewritten to use the makeLet helper that accepts the vector of bind expressions, e.g. the one in visitFast(const ExpressionAdd) and in generateSetExpression