Improve the OAOO-ness of DO-SYMBOLS, DO-{ALL,EXTERNAL}-SYMBOLS.

Iteration is somewhat slower, but now there are fewer places to touch
when fixing the bug related to simultaneous FIND-SYMBOL and rehash in
multithreaded code. Conforming code that uses these macros would not
encounter the rehash bug, due to constraints on traversal operations,
but a fix for the bug necessarily affects these macros.
So the trade-off seems fair considering the unlikelihood of package
iteration being a bottleneck in an application's performance.
Probably get specializing array dumping right finally.

Previous fixes for dumping specialized vectors from the cross-
compiler contained a fatal flaw: if the host lisp said that
a vector was a SIMPLE-VECTOR, this was taken as gospel.

Unfortunately, cross-compilation of 'octets' was in fact broken
due to d12f5387f9da24da72cb7cb09680ccc1d507f8d5 which really
needed (SIGNED-BYTE n) arrays to work. That no bug was reported
could mean that nobody who builds in a Lisp that doesn't have
(SIGNED-BYTE 16) arrays needs the CP857 or CP864 code mappers.
But in principle, all specialized arrays were always mishandled
if the host lisp upgraded them to T.

There is no good way to write a unit test for this
aside from regression tests that fail when truly cross-compiled.
Add comment