Manually applied Jens Axel's patch to add `random-prime'
JIT simplification

The scheme_generate_arith() function effectively had its own
copy of of the general scheme_generate_two_args() function that
predates the general one. Using scheme_generate_two_args()
instead simplifies and clarifies the code.
skip some unneeded fixnum tests in JIT-generated code
JIT tweak: stack-clearing operations do not disturb registers
change representation of optimization flags on primitives

Makes room for a lot more.
bytecode compiler: replace table of local types with flags on primitives

This change makes it easier to annotate more primitives, so functions like
`integer-length' are now annotated as producing a fixnum.
JIT: fix a bug related to self-tail calls

The last argument in a self-tail cal is treated specially and
not immediately stored on the "runstack". Space was formerly
allocated for it, though, and under certain circumstances
that space was not initialized. I think a combination of thread
timing, GC timing, and flonum boxing could potentially lead to a
crash (but constructing a test case is really difficult).
JIT: refactor unboxing flostack to better support other datatypes

Instead of keeping offsets in terms of `double's, keep it in
terms of bytes. This change is a step toward putting other kinds
of values on the flostack, such as extended-precision floats.
fix to bytecode compiler's propoagation of local-type info

This is another old bug that could have caused validation failures
with flonums, but it showed up with fixnum tracking because fixnums
are more common (e.g., from `string-length').

There were really two bugs: information installed at the
wrong offet in one place, and a failure to detect that information
should be propagated in a different place. Fixing both avoids
a validation problem with `html/sgml-reader'.
another fix to bytecode compiler's propoagation of local-type info

This one is related to shifting type info when the closure is
made smaller due to lifting of something that used to be in
the closure. The `games/pousse/robot' module exposed the bug.
racket/gui: fix docs for `printer-dc%' and related functions

A page-setup dialog is now available on all platforms, which means
that no dialog will appear when a `pirinter-dc%' is created. Meanwhile,
note that `end-doc' normally shows a (different) dialog.
scheme/gui/base: fix module-attach problem in `make-gui-base-namespace'

The `scheme/base' module had become unreachable from the `mred' module.
While that normally would be a good thing, it lead to troublesome
multiple instantiations of `scheme/base' that caused problems for
attaching further modules to the namespace.
racket/gui/dynamic: make `gui-dynamic-require' pull from `racket/gui/base'

It was pulling from `scheme/gui/base', instead. The one from `scheme/gui/base'
is now different and still pulls from `scheme/gui/base'.

This could break some programs that accidentally depended on `scheme/gui/base'
exports from `gui-dynamic-require', but it's more likely to fix problems.
minor bytecode-compiler fix

A bogus flag was propagated to closure information. This flag
was ignored by the validator, but not `zo-parse'. Make the validator
reject the bogus flag, too, while fixing the compiler.
fix docs for `time'

The `time' form allows multiple forms and as an internal-definition
context.
avoid a compiler warning
remove `sirmail'

SirMail is moving to its own repo:
 https://github.com/mflatt/sirmail
Install with
 raco pkg install sirmail
Fix some docs. Add an example too.
Fix typo

Related to PR 13241
Fix citation disabiguation when authors differ.