Fix userparse function

Remove quadratic addition of vp to list.  Instead, keep track
of the current tail, insert it there, and then add the entire list
in one swell foop.

Also check if we're returning T_OP_INVALID, and if so, free the
intermediate VPs.  This ensures that we either return something,
or an error and nothing else.

It also means that the caller doesn't have to worry about freeing
intermediate VPs if there's a parse error on later ones