compiler: Run DisposeValues pass on all O levels

Although it's technically an optimisation not required for correctness,
-O 0 generates absolutely silly code without DisposeValues. It also
causes memory exhaustion in the LargeProgramSuite when running with
optimsation disasbled due to the pathological amount of IR it attempts
to generate.
runtime: Tweak comment

- Remove stray :w

- Re-wrap at column 120
runtime: Compare string contents in isEqv

R7RS doesn't require us to compare string contents so this isn't
strictly required However, we're already required to do this with
symbols which have the exact same comparison logic. This also makes eqv?
on constant strings consistent between -O2 (which folds constants) and
-O0 (which doesn't)
runtime: (call/cc) improvements

- Use exceptions to emulate more (call/cc) cases at runtime. This also
  allows (call/cc) to work with optimization disabled.

- Fix crash when calling a non-constant procedure (i.e. a procedure with
  a closure) through (call/cc)

- Add more (call/cc) unit tests for both new functionality and untested
  existing functionality
Run all functional tests at -O 0 and -O 2

The fact the functional tests always ran with optimisation enabled means
the unoptimised case was poorly tested and slowly bitrotting. When
additional optimisations are introduced this will only become more
problematic as the delta between the optimised and unoptimised code
increases and some trivial tests are optimised away completely.

This builds on the work of the previous 4 commits which fix tests which
were failing with optimisation disabled.