parse: avoid slices and ranging in hot paths
parse: avoid slices and ranging in hot paths

Keep peekAny() usage only in error paths and where we need it because
we actually have a slice.

name                 old time/op    new time/op    delta
Parse/Empty-4          1.07µs ± 3%    1.06µs ± 4%    ~           (p=0.781 n=10+10)
Parse/Whitespace-4     7.66µs ± 1%    7.37µs ± 2%  -3.84%         (p=0.000 n=9+10)
Parse/Comment-4        3.55µs ± 3%    3.56µs ± 4%    ~            (p=0.720 n=9+10)
Parse/LongLit-4        13.2µs ± 2%    12.7µs ± 5%  -3.37%         (p=0.002 n=9+10)
Parse/Cmds-4           23.5µs ± 6%    22.4µs ± 4%  -4.98%         (p=0.001 n=10+9)
Parse/SglQuoted-4      4.84µs ± 2%    4.85µs ± 1%    ~             (p=0.246 n=9+8)
Parse/DblQuoted-4      6.86µs ± 1%    6.76µs ± 1%  -1.41%          (p=0.000 n=9+8)
Parse/NestedStmts-4    17.6µs ± 2%    17.3µs ± 3%  -2.16%         (p=0.008 n=9+10)
Parse/Clauses-4        14.8µs ± 3%    14.4µs ± 2%  -3.03%         (p=0.000 n=10+9)
Parse/CmdSubst-4       15.1µs ± 3%    14.8µs ± 4%  -1.81%        (p=0.011 n=10+10)
Parse/Binary-4         11.2µs ± 2%    10.9µs ± 4%  -2.13%        (p=0.009 n=10+10)
Parse/Redirect-4       11.8µs ± 3%    11.5µs ± 4%  -1.92%         (p=0.010 n=9+10)
Parse/Arithm-4         16.8µs ± 3%    16.2µs ± 4%  -3.46%        (p=0.005 n=10+10)

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