Make better use of the x86 addressing mode

We now emit

    movq %rdi,16(%r14,%rsi,8)

instead of

    leaq 16(%r14),%rax
    movq %rdi,(%rax,%rsi,8)

This helps e.g. byte array indexing.
Make FunPtr's role be phantom; add comments.

This change also updates castFunPtr to make it free at runtime.
This fixes #9163.
Clarify error message. See #9167.
Add comments about instances of type-level (==).
Refine deprecation warnings in template-haskell.
Fix #9097.

`Any` is now an abstract (that is, no equations) closed type family.
Fix #9085.

Inaccessible equations in a closed type family now leads to a
warning, not an error. This echoes what happens at the term level.
Fix #9062.

Removed (pprEqPred (coercionKind co)) in favor of
(pprType (coercionType co)).

Also had to make "~R#" a *symbolic* identifier and BuiltInSyntax
to squelch prefix notation and module prefixes in output. These
changes are both sensible independent of #9062.
Test #9097.
Fix #9111.

Data.Typeable.Internal should now derive instances for all types
defined in modules beneath it.

Still to do: Typeable instances for type literals, but that's a very
separate matter.
Test #9085.
Test #9111.