Remove ~200KB of uninterned symbol names from the image.

First, DEFMACRO always names its WHOLE and ENVIRONMENT arguments the same
by STRING= but using non-EQ symbols. This is subtly different from
(LET ((whole '#:whole) (environment #':env)) ..) - because if for some
reason that eludes me there is really an issue of inadvertent capture,
the compile-time hygiene of macros is essentially unaltered by this patch.

Second, genesis coalesces uninterned symbols whose names are STRING=.
This is permissible not just for our own code, but I refrained from having
the regular fasloader do this because I suspect that it might be suprising
that uninterned symbols are coalesced across files. It's hard to tell what
CLHS had in mind- it doesn't specify when objects have to be *dissimilar*.
Move some declaims from cross-misc to cross-early
IN-PACKAGE shouldn't have to type-check before assigning *PACKAGE*
Muffle some noise during cross-compilation
Lazily coerce symbols to functions in SET-[DISPATCH-]MACRO-CHARACTER.

The analysis in the bug report is correct in my opinion, however the
following interesting variations in other Lisp implementations exist:
 - two coerce early, two coerce late.
 - one goes halfsies: early for dispatch macros, late otherwise.

There is an edge case that is unexplained by CLHS, namely that of NIL
(not #'NIL) as a function-designator. NIL can't portably designate a
function, but CLHS does not indicate that specifying NIL removes a macro.
Among the choices of always failing, either at the time of the SET- by
complaining that NIL shouldn't be DEFUN'ed, or complaining at execute
time, or changing the character to have no macro, I opted for the last.
This is consistent with one but not both of the other lazy-coercing
implementations and consistent with the fact that NIL as returned
from the GET- functions means that there is no macro.

Fixes lp#1012335
Deal with a few readtable issues.

As observed by Tobias Rittweiler in the named-readtables Quicklisp
system, the complex logic in our SET-SYNTAX-FROM-CHAR had dubious
behavior which I've tried to rectify.

- It was possible to create a broken dispatching macro character
  with no dispatch table by using the arguably incorrect code:
   (SET-MACRO-CHARACTER #\% (GET-MACRO-CHARACTER #\#))
  This works now, where "works" is defined to mean that the
  dispatch table is shared, and alterations to the shared
  table will be seen by either dispatch character.

- On the other hand it is no longer possible to use
  SET-DISPATCH-MACRO-CHARACTER on a character which became
  non-dispatching by dint of using SET-MACRO-CHARACTER on it.
  This seems to have been an oversight that previously
  dispatch tables were sticky, which allowed a weird trick in
  sb-cover. Now a character will not be treated as dispatching
  if SET-MACRO-CHARACTER is used on it unless the function was
  obtained from GET-MACRO-CHARACTER of a dispatching character.

- Short of binding an error handler there was no way to express
   (unless (already-dispatching-p char)
     (make-dispatch-macro-character ..))
  Nearly all other Lisp implementations allow repeated invocation
  so now we do too.

Because a slot was removed from READTABLE that named-readtables
needed, there is a hopefully short-term compatibility hack in place.
Fix explanatory comment for *HANDLER-CLUSTERS*
Simplify %HANDLER-BIND by introducing local functions

Also add basic tests for HANDLER-BIND.
Fewer *HANDLER-CLUSTERS* special re-bindings in SIGNAL
Remove extra initialization
Slightly unbreak named-readtables per my latest changes.

The compatibility API that is exposed for dispatching characters
can coerce fdefns to symbols, but there is still a problem that
non-dispatching character functions are groveled out and passed
to SET-MACRO-CHARACTER which won't work in general.

Related problem in sb-cover - it did not understand that
GET-MACRO-CHARACTER could return a function-designator.
Remove another 100KB of junk strings from the image.
Silence "unable to dx-allocate" notes from MAPfoo transforms
Implement SIMPLE-FUN-P more efficiently
Put in a random comment about structure dumping
Fix grammar mistakes pointed out by Cyrus Harmon
Add two more known cases to checkgen

OBJECT-NOT-TYPE-ERROR 'FUNCTION -> OBJECT-NOT-FUN-ERROR, etc.
Implement COERCE-SYMBOL-TO-FUN more efficiently.

Rather than two globaldb inquiries we can do with just one.
(FDEFINITION is conceptually a globaldb inquiry)
As a side effect, this gives saner behavior in the perverse case
in which the compiler's understanding of function :KIND differs
from the runtime's reality.
Get rid of a kludge by Nikodemus and revise a stale comment.
Change x86-64 disassembler not to be so mousy.

I found it's lack of conviction as to whether something was a
static symbol to be disconcerting.