(SETF %FUN-NAME) on closures, now with fewer restrictions.
Any closure can be given a name, via a global hashtable.
But the special case of storing the name in the closure is used if either
it had a spare slot, or the namer does not require preserving identity.
The limitation still exists that the debugger does not see closure
names in a backtrace unless the creator of the closure contained
(DECLARE (OPTIMIZE SB-C::STORE-CLOSURE-DEBUG-POINTER))
Otherwise we lose the backpointer from the simple-fun to the
closure that invoked it. I think that's a separate concern.
Also:
- rewrite %FUN-NAME and (SETF %FUN-NAME) to be less ugly and
dispatch on type more efficiently.
- use SB-MOP:GENERIC-FUNCTION-NAME instead of SLOT-VALUE.
- explain a fixme in gc-common