fix hairy-specials walker bug

LET* is hard.  Each value form needs to be walked in an environment
in which the previous binding, and any bound declarations which
apply to that binding, are visible.  Which declarations are those?
Well, in principle that's pretty much unknowable, but in practice
we can do fairly well with just SPECIAL and some magic PCL-internal
declarations.

For extra fun, it's legal to rebind variables in LET*.  In which
case, if there's a bound declaration, which of the bindings does
it apply to?  The compiler believes that it's the *last* binding,
so make that so in the walker too.
be more explicit about fixnumness

It would have been nice if the compiler had thrown some kind of
warning for the use of a bignum where a fixnum was expected, even
under (SAFETY 0).  Given that no warning is thrown, be extremely
explicit in constructing a suitable fixnum.