bazel syntax: simplify EvalException

BEGIN_PUBLIC
EvalExceptionWithStackTrace is deleted.

EvalException holds an accurate stack of call frames
(instead of an inaccurate stack of expressions):
the stack has exactly one entry per active function,
including the <toplevel> function and built-ins.

(EvalException will eventually consist of nothing more than an error
message and a call stack, which is initially empty but is set by the
interpreter as soon as the exception is thrown out of Starlark.fastcall.
For now, it still has a Location field, but this will be removed in
a followup by having each caller that supplies a location instead put
the location into the error message string.)

Stack trace printing no longer prints expressions. Instead,
like Python, it reads from the file system. This yields accurate
source information, and also breaks the dependency of EvalException
on syntax.Node, which is one of the last blockers to a compiled
representation. EvalException.getMessageWithStack may be provided
an alternative means of reading the source (e.g. a fake file system).
We don't bother to hook up the SourceReader to the fake file system
in most of the unit tests. Few tests should be asserting details
of the complete stack anyway. BlazeRuntime installs a VFS-based
SourceReader at startup.

Stack information now includes column numbers.

Example:

```
$ cat a.star
def reciprocal(x):
   return 1 // x # a comment

sorted([1, 2, 3, 0], key=reciprocal)

$ Starlark a.star
Traceback (most recent call last):
        File "a.star", line 4, column 7, in <toplevel>
                sorted([1, 2, 3, 0], key=reciprocal)
        File "<builtin>", in sorted
        File "a.star", line 2, column 13, in reciprocal
                return 1 // x # a comment
Error: integer division by zero
```

Before, a stack of one entry was flattened into one line,
"file:line:col: message", but now it is shown as a stack,
thus revealing the function name and source code.
If the final frame is a built-in, with no location,
then it is flattened, but we retain the function name
in the prefix attached to the error message:
e.g. "Error in len: int is not a sequence"

Also:
- use Starlark.errorf in various places.
- SRCTU and StarlarkAspectFactory interpose a call to a
  dummy function before calling rule.implementation(ctx),
  to establish the name and location of the call that
  instantiated the rule.
- EvalException.print is now getMessageWithStack.
  getMessage always returns the message, sans stack.
- lots of fixes to tests, mostly cosmetic.

I have audited all the places in Bazel where built-in code
calls Starlark code; nonetheless, this change may make error
messages less tidy, or even fail to display a stack where it
used to before. Please alert me if you notice a potential
regression.

---

Though the resulting code is straightforward, making the
change was extraordinarily difficult; this was my seventh
serious attempt in as many months. Previous attempts
failed by doing too little (e.g. trying to clean up
only one of many parts of this highly entangled problem)
or by doing too much (e.g. changing the public constructors
in a way that touched every file in Blaze).

END_PUBLIC

RELNOTES: Major changes to reporting of Starlark errors and the call stack. (Please be alert to possible regressions, such as errors that lack relevant location information.)
PiperOrigin-RevId: 325100256
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
index 921bc91..ff139b6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
@@ -939,7 +939,7 @@
               try {
                 exp.export(label, name);
               } catch (EvalException ex) {
-                handler.handle(Event.error(ex.getLocation(), ex.getMessage()));
+                handler.handle(Event.error(null, ex.getMessageWithStack()));
               }
             }
           }
@@ -948,7 +948,7 @@
     try {
       EvalUtils.exec(file, module, thread);
     } catch (EvalException ex) {
-      handler.handle(Event.error(ex.getLocation(), ex.getMessage()));
+      handler.handle(Event.error(null, ex.getMessageWithStack()));
     }
   }