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.