(PUP-3514) Fix broken errors from future parser

When the future parser called the error method from within the parser
(the few remaining cases handled by the parser directly), that resulted
in the Factory being called to produce new expressions and these were
subsequently turned into strings - showing a series of (slice ...)
s-expression.

The error method was simply doing the wrong thing (copied from the 3x
parser). This commit fixes the problem by picking up as much as possible
of the known location and passing that along in the exception that is
raised.

One test is included to ensure we do not have regressions on this
behavior. The remaining error cases are still untested, but the
intention is for those to be moved out from the grammar and into
validation to improve the ability to give better error messages.

This commit only fixes the immediate problem of getting garbage output
instead of file, line and position in these cases.
There is only one test, but there are several places in the parser where an error is raised. It is either giving it a Factory or some other object (not investigate, and the if is for "safe rather than sorry"). It is reassigning the arg since in no case should it proceed with a Factory.

Did not want to spend time writing testcases for all the parser's direct errors since we are going to rewrite that part.