pub fn collect_properties(expr: &Expr) -> Vec<(String, String)>
Collect all property accesses from an expression tree.
Returns a list of (variable, property) pairs needed for column projection.