compiler: Rework dynamic/undecided values in tests

Some unit and funcitonal tests want to explicitly discard type
information for a value to either disable certain optimisations or
ensure the value is placed in a datum cell. Previously this was done by
placing the value in a pair and then using (car) to select it. This
worked fine but soon the optimiser will be able to see through that.
Instead place the value in a mutable cell and then read it back. There
is little motivation to optimise mutables to the point where they track
values at compile time so this should be future proof

At the same time rename undecided-true/undecided-false to
dynamic-true/dynamic-false. This reflects the usage of "static" in the
planner test to refer to values that are discovered at compile time.
compiler: Static planning (car) and (cdr)

If we have a constant pair we can plan (car) and (cdr) at compile time.
This is now (eqv?) safe due to the codegen's constant cache.
compiler: Remove LocatedSemanticException

All SemanticExceptions are now located. Collapse SemanticException and
LocatedSemanticException in to one sealed class to simplify the code.
compiler: Static (vector-length) and (vector-ref)

Besides allowing more static evaluation to occur this can also catch
certain out-of-bounds references at compile time