optimizer: refine virtual clock, more precise shift-fuel tracking

Allow an effect-free `if` to not increment the effect-tracking
virtual clock (but increment the clock during branches, to avoid
moving computation into a branch).

Spend empty-`let`-elimination fuel more precisely, so that more
empty `let`s can be removed while still avoiding quadratic
compile times.
Scribble: improve Unicode handling for Latex/PDF output

Normalize strings to composed form before splitting a
string into characters to handle individually.
fix use of wrong comparsion macro

The wrong comparison could possibly (though not likely) cause an
operation-skipping optimization to be missed.
avoid getting stuck on non-UTF-8 symbol encodings in bytecode

Found by fuzz tester, and this bug seems to be a common reason for
the fuzz test to time out.
Fix UTF-8 symbol repair

Commit 6a5a3037b4 was not quite right, because it used sightly the
wrong variant among a dozen decoding functions.  The test suite caught
the problem, but I forgot to run it before pushing.

Also, repair the "Inside" documentation on the function that was
incorrectly used, and document the new variant.
Fix reading of badly encoded symbols from bytecode

This is the third try to fix the bug exposed by "fuzz.rkt". Previous
repairs addressed a symptom at the point of printing bad symbols,
instead of the cause at a failure to validate a symbol's encoding
when reading bytecode. This one fixes reading.
Fix type for syntax-local-phase-level
distro-build: add "versionless" option

Versionless mode avoids putting a version number in an installer's
name or in installation paths.
Optimize match patterns of the form (list x ...).

This also applies to `(mlist x ...)`, even though
that involves two traversals when only one is
required by the old method. Timing suggests that
the new code is nonetheless faster.
In -and move the NotTypeFilters to the begining as well.
Change type<? to rep<?.

Also moves type-equal and rep<? to rep-utils.
Simplify and document compact.
Make with-lexical-env/extend-props not execute its body if its dead.
Do not rebuild the environment made by check-non-recursive-clauses.
Use (listof tc-result?) instead of tc-results? when inferring types.

tc-results? does not represent Bottom in a way that maintains the number
of values that generated the Bottom.
scribble: 'border and '{left,right,top,bottom}-border properties for cells
racket/tcp: use %E instead of %e for socket error reporting

Using "%E" is right for WinSock errors, instead of "%e".
Add equality operations for Reps.

This speeds up microbenchmarks by 50%, and new-metrics.rkt by 30%.
inside: modernize overview to discourage extensions and embedding

The beginning of the "Inside" documentation was still geared toward
writing extensions or embedding Racket, which almost no one does any
more. Shuffle and change the beginning to orient it around the
foreign-function interface, instead.
optimizer: test use of virtual clock in branches

Test that the optimizer don't move some expressions inside if branches.