add tabbing rule for with-syntax*
Metafunctions now typeset their contracts as the first line

This is a backwards incompatible change, but there is a keyword
argument to render-metafunction and render-metafunctions that
goes back to the old behavior
add an example to the scale docs

related to PR 14562
adjust recursive-contract so that it terminates on cyclic values

closes PR 14559

This slows down tight recursive contract loops by about 10%, using
the code below as the micro-benchmark:

(require racket/contract/base)

(define c
  (recursive-contract
   (or/c #f (cons/c c c))
   #:flat))

(define n1
  (let loop ([i 500000])
    (cond
      [(zero? i) #f]
      [else (cons (loop (- i 1)) #f)])))

(define n2
  (let loop ([i 500000])
    (cond
      [(zero? i) n1]
      [else (cons (loop (- i 1)) #f)])))

(collect-garbage) (collect-garbage) (collect-garbage)

(void
 (time (contract c n1 'pos 'neg))
 (time (contract c n2 'pos 'neg)))

(cdr n1)
(cdr n2)