Either simplified the items below greatly or completely missed the point and broken everything without realising it yet (we'll see).
Altered visitnewexpression to call visitexpression on each argument rather than manually resolving members, this causes return expression to be built via same calls as individual memberexpressions (providing consistency) and so simplifies getselectparameters in modelvisitor.