Treat keyword-only syntax environments differently from runtime environments.
The former are those created by let-syntax and the like; the latter are models
of runtime environments as created by lambda.
This fixes a bug when let-syntax contains a bunch of definitions, which should
be defined in the parent environment of the let-syntax, because it's meaningless
to define them in the let-syntax environment itself. This was previously worked
around by heuristic means, but this change makes the definitions appear in the
correct syntactic environment corresponding to the runtime environment.
Manual cherry-pick of
8ab22a695b3801e59c5067fb065e7dfad4e59c96.