copied from racket/contract because racket/contract/combinator
had some (provide (except-out (all-from-out <private-file>) ...))
that ended up accumulating things it shouldn't have over the years
The new implementation is considerably simpler than the old
implementation, and it avoids `syntax-local-make-definition-context`,
`syntax-local-get-shadower`, and `syntax-local-make-delta-introducer`.