syntax: allocate CallExpr in batches too
syntax: allocate CallExpr in batches too

CallExpr is almost everywhere. On an average shell script, more than
half of the statements are going to have a CallExpr in them. As such,
allocate them in batches like we do with other very common structs.

This greatly reduces the number of allocs and thus the time spent. I'm
not sure where the space savings come from.

name                   old time/op    new time/op    delta
Parse/LongStrs-4         2.76µs ± 1%    2.65µs ± 1%   -3.98%  (p=0.002 n=6+6)
Parse/Cmds+Nested-4      7.46µs ± 1%    6.94µs ± 2%   -6.91%  (p=0.002 n=6+6)
Parse/Vars+Clauses-4     5.57µs ± 1%    5.45µs ± 1%   -2.19%  (p=0.002 n=6+6)
Parse/Binary+Redirs-4    5.46µs ± 1%    5.21µs ± 1%   -4.55%  (p=0.002 n=6+6)

name                   old alloc/op   new alloc/op   delta
Parse/LongStrs-4         2.34kB ± 0%    2.32kB ± 0%   -1.03%  (p=0.002 n=6+6)
Parse/Cmds+Nested-4      5.68kB ± 0%    5.57kB ± 0%   -1.97%  (p=0.002 n=6+6)
Parse/Vars+Clauses-4     3.17kB ± 0%    3.14kB ± 0%   -1.01%  (p=0.002 n=6+6)
Parse/Binary+Redirs-4    3.96kB ± 0%    3.89kB ± 0%   -1.82%  (p=0.002 n=6+6)

name                   old allocs/op  new allocs/op  delta
Parse/LongStrs-4           14.0 ± 0%      11.0 ± 0%  -21.43%  (p=0.002 n=6+6)
Parse/Cmds+Nested-4        68.0 ± 0%      54.0 ± 0%  -20.59%  (p=0.002 n=6+6)
Parse/Vars+Clauses-4       49.0 ± 0%      46.0 ± 0%   -6.12%  (p=0.002 n=6+6)
Parse/Binary+Redirs-4      44.0 ± 0%      35.0 ± 0%  -20.45%  (p=0.002 n=6+6)

mvdan/sh,mvdan/sh,mvdan/sh,mvdan/sh