(interactive-form, function-docstring): New generic functions
Change `interactive-form` to be a generic function, and
change `documentation` to delegate to a new `function-docstring`
generic function so that we can use `cl-defmethod` to construct
the docstrings and interactive forms of FCRs.
* src/eval.c (Fcommandp): Rewrite to delegate to `interactive-form`
when potentially necessary.
* src/doc.c (Fdocumentation): Delegate to `function-docstring` in
most cases.
* src/data.c (Finternal__interactive_form): Rename from
`Finteractive_form` and simplify to only handle the cases we can't (yet)
handle from Lisp.
(syms_of_data): Adjust accordingly.
* src/callint.c (Fcall_interactively): `interactive-form` is now
defined in Lisp.
* lisp/simple.el: Require `subr-x`.
(function-docstring, interactive-form): New generic functions.
* lisp/loadup.el ("simple"): Postpone loading it after `cl-generic`.
* lisp/emacs-lisp/cl-generic.el (cl--generic-lambda):
Avoid `interactive-form` to avoid breaking bootstrap since it's now
defined as a generic function.
(cl-defmethod): Simplify.
(cl--generic-compiler): New var.
(cl--generic-get-dispatcher): Use it.
(cl--generic-prefill-dispatchers): Rebind it.