Play around with fmreplace in the comments.
More experimentation with EVAL.

Latest change is to use definitions to hide most of the list of
declarations from EVAL until they are needed. This has marginal
benefit.