Check function kws against expected before tc-expr

This checks that the given lambda has the right keywords
wrt to the expected type. Doing this should avoid the bad
arity errors that result from the kw protocol encoding.

Closes PR 13898
Rework how keyword methods are handled by TR

Override the `define/foo` forms for racket/class to
allow type annotations and to use TR's keyword property.
improve check syntax so opening the context-sensitive menu is faster
in certain situations

Specifically, don't compute the identifiers-hash before opening the
menu but, when it does need to be computed, avoid consider the same
arrows over and over. This makes an especially big difference when a
region of text is selected that contains lots of arrow heads that all
point to a place that has lots of arrows.

Specifically, the time to compute the identifers hash for the example in
the PR is now about 200x faster (altho this still takes 200 msec, which
is why it isn't computed at all in that sequence of steps any more).

closes PR 14586
optimizer: fix `with-continuation-mark` optimization

Misuse of the function to optimize applications constrained the
body of a `with-continuation-mark` form to a single result
value.
optimizer: fix reordering in `let+values`+`values` splitting

While the commit comment in 3150b31eb7 still seems right, the changed
overlooked the fact that the arguments to a split `values` might get
reordered (due to the way binding positions are calculated). Fix the
optimizer to make sure that reordering is allowed.

The change touches a lot of code, because we want to use
"omittable" to implement "movable", and it's not ok to
reorder access of mutable variables (in case some other thread is
mutating them). We have to fix all the calls to "omittable"
to support the slight generalization.
optimizer: improvements mostly for splitting of multiple-value bindings

Convert

 (let-values ([(<id> ...) (if <id-t>
                              (values <e1> ...)
                              (values <e2> ...))])
    ....)

to

 (let ([<id> (if <id-t> <e1> <e2>)]
       ...)
    ....)

which duplicates the `(if <id-t> ....)` test, but that's likely to
be worthwhile to avoid multiple-values shuffling and enable more
constant and copy propagation.

A related improvement is to more eagerly discard `let` wrappers
with unused bindings during optimization, which could enable
further optimization, and allow moving conditionals relative
to other expressions to avoid intermediate binding.

Eagerly discarding `let` wrappers exposed a bug in the optimizer's
shifting of variable locations by exercising the relavant shifting
operation in shift_closure_compilation().

Closes PR 14588
Check kw functions with optional arguments better

In particular, allow the optional kws to be left out in the
expected type (a function type with fewer optional kws is
a supertype).

Closes PR 14583
Give more information for kw errors in TR

Tells the user which missing keywords were mandatory and
which were optional (which is useful if, e.g., the expected type
says mandatory but the function had it optional).
Closes PR14589.
add abbreviate-given-names

This changes the behavior of make-cite and authors, but it would
probably be better to change the behavior of generate-bibliography
adjust the 'Skip to Next Misspelled Word' menu key shortcut to try to avoid conflicts
Remove extraneous patterns in tc/funapp.

Also improves error messages on cases which return AnyValues/ValuesDots.
Only match on f-type in tc/funapp.
Make funapp take a Type/c instead of a tc-results?.
Add bottom as a special case in multiple value context.
Add match expander for functions and arities together.
Add test cases for subtyping of -Bottom.
Fix subtype for filters in AnyValues.
update the expected results for the redex bitmap tests
Make combine-results work with tc-result/c.