Generalize AssertSequentialIsOK logic and improve its message.

1. If one passes a `mode` argument without a property named `mode`,
   the previous version will fall into the ThrowError branch
   (because mode.mode => undefined and undefined !== "seq")

2. The old error message used the strings "par" and "seq", which might
   make the reader think that the assertion is solely about the
   appropriate value for the `mode` property, which happens to take on
   the values "par" or "seq" in some cases.  But the real condition
   being signalled here is not about the string values "par" or "seq";
   it is instead about the dynamic behavior of the runtime system.
   This changes the error message to use longer phrases, which should
   hopefully make the intent clearer.

There is a third change I want to make, changing the logic of the
conditional guard further, but that change is not as important to me
as the two above.
Generalize the DEBUG code in ParCallToUncompiledScript.

The old code assumed that the argument `func` will always have a
script associated with it.  But this is not true in some cases,
e.g. in the case of ES6 bound functions `(a,b) => ...`.

This patch has two effects:

1. Remove the assumption that the input function has a script.  Print
   *something* in all cases, regardless of whether we can find a
   script or not.

2. For bound functions, attempt to follow the chain of bindings to
   find some script at the end of the chain.