redex: unfold nts once during unification

Also:
* add a backtracking limit
* check for ground terms in both term and pat environments
  when filling in generated patterns
* update tests to be consistent with the above
racket/gui cocoa: fix `enable' on window whose ancestor is disabled
ffi/unsafe: allow a constant result for asynch use of a callback

A constant result for foreign-thread use of a callback allows a
callback to return without synchronizing with the Racket thread.
A constant result is thus useful when a callback's work can simply
be skipped if the callback is applied in the "wrong" OS thread.
ffi/unsafe/objc: remove `-A'/`+A', add `#:async-apply'

Another run at the problem 57516164de was meant to solve. The
new solution just gives up when a `drawRect:' method is called
in the wrong thread, which might create refresh glitches but
avoids a deadlock in the case that the Racket thread is blocked
on the update happening in the foreign thread.
setup/scribble: avoid top-level state
raco pkg: fix `--scope user' option
pkg/gui: first cut at a GUI package manager

For now, run it with `racket -l pkg/gui/main'. The expectation
is that DrRacket will start using this GUI.
fix `exn:fail:filesystem:missing-module-path'
Add optional message flags argument to imap-append.

Previously this was hard-coded to use the \Seen flag. Now that's the
default value when the argument is not supplied.
ffi/unsafe: fix memory-management problem in recent change

Fixes a problem with bba223a9fe.
fix contract
modernize a few contracts in drracket
add a few more contracts to those that opt/c recognizes and
fix a few bugs in existing ones

also, adjust opt/c so that it logs failures to optimize on its own logger
make contract structs print a little bit more nicely.
New Racket version 5.3.4.5.
fix a JIT bug related to inlined structure constructors

Merge to v5.3.4
file/gunzip: fix problem with lookahead handling

If less than the lookahead bytes have been pulled in, then the
old code would attempt to read a negative number of bytes.
raco setup: put launchers for user collections in user space

Also, remove executables (in full setup or "tidy" mode) when the
corresponding collections are removed.

As a result of these changes, `raco pkg' puts launchers from user-scoped
packages in user space and cleans up launchers from removed packages.

There's no attempt to include "launchers.rktd" in a distribution.
That should be ok: having an entry in "launchers.rktd" just
makes a launcher a candidate for removal. Including "launchers.rktd"
would be a hassle for many reasons, including that the initial set
of launchers is platform-specific.
fixes for Windows related to missing-module exceptions
update for 5.3.4