Extern Function Declarations Type Check #10877

Functions declared in an 'extern' were not properly typed checked and
will report syntax errors on failure instead of an ICE.

Based on some guidance from @huonw and @pnkfelix, I've added an additional
argument to force a ident only function declaration check. I believe I've done it so
that unless it's an ```ForeignItemFn``` it will use the normal type checking.

A test has been added to compile-fail from the examples in the issue.

Fixes #10877