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