Broke up the function parsing

This change broke up the parsing of function into 2 separate parts.  It
now parses the :func and :endfunc commands as separate LineCommand
values.  ParseSingleLine is dedicated to creating these type of unlinked
LineCommand entries.  ParseSingleCommand will link these commands into a
single LineCommand value.

Next I will make the same change for :if
Moved if parsing to the new model
Make ParseError a LineCommand value

Representing a parse error as a separate type was simply a bad
representation.  It made it impossible to mix parse errors into places
where a LineCommand value was desired.  For example in function bodies.

The core methods in Parser now return LineCommand instead of
ParseResult<LineCommand>.  Any routine wishing to know if there was a
parse error can simply query the LineCommand.ParseError union value.
This resulted in a major simplification of the parser.
Changed function parsing

A parse error inside a function will now result in the function still
being created but with parse errors for commands.
More function definition parsing improvements

Can now parse s: and <SID> prefixed function names
More small cleanups