Implement findall/3

This works in nearly all cases, but there's a problem with the
variable_instances test below.  As the comment says, having a variable
with the same name in findall's template and its instances argument
causes the test to fail.  I'm not yet clear on why this happens.
More test cases for ->/2

These cases, like all the others, are derived from the ISO Standard
and from Prolog: The Standard by Deransart, etal.

Before committing, I intentionally broke ->/2 and made all tests fail.
I then restored the correct implementation and they all passed: red
light, green light.
Commented out tracing output for debugging

When errors occur in the parser, it's helpful to be able to trace it
with Printf statements.  I wish Go could be traced more elegantly, but
this works in a press.
Accept functors when looking for infix operators

A functor is just an atom that the lexer thought looked like a
functor.  The lexer could be wrong, as it is in (true->(true)), so
consider that the functor might be just a plain atom.
Minor built in cleanups
if-then-else parse test and fix

Semicolon doesn't need to be quoted when it's a functor.
Cutting should not remove the barrier

If cutting removes the cut barrier, multiple cuts against the same
barrier fail because they can't find the barrier.  The barrier must
remain so that the cut knows it succeeded.
Implement ;/2 if-then-else

As with ->/2, it may be more efficient to implement this directly in
terms of pushing to conjs and disjs.  When efficiency in this code
becomes a problem, we can cross that bridge.