Chez Scheme: move `gcd` to Scheme
Chez Scheme: move `gcd` to Scheme

Although a kernel `S_gcd` still exists, its now used only for cases
where a schoolbook-dvision step will complete quickly. Otherwise,
Euclidean GCD is implemented at the Scheme level and using
Burnikel-Ziegler division for large numbers, avoiding long and
uninterruptable kernel steps. Also, powers of two are moved out of the
way quickly through shifting, which makes all the difference for
something like `(log (expt 10 1000000) 10)`.

Closes #4167

mflatt/ChezScheme,mflatt/ChezScheme,mflatt/ChezScheme