Fix decoding of unboxed closure kinds

Closes #18378.  Note that cross-crate unboxed closures are
still unimplemented and will fail to work currently.
Treat cross-crate unboxed closure def IDs consistently

Always translate the ID into the local crate ID space since
presently the only way to encounter an unboxed closure type
from another crate is to inline once of its functions.

This may need to change if abstract return types are added.

Closes #18543
Add regression test for #16790, #18378 and #18543
auto merge of #18546 : bkoropoff/rust/unboxed-closures-cross-crate, r=nick29581

This fixes some metadata/AST encoding problems that lead to ICEs.  The way this is currently handled will need revisiting if abstract return types are added, as unboxed closure types from extern crates could show up without being inlined into the local crate.

Closes #16790 (I think this was fixed earlier by accident and just needed a test case)
Closes #18378
Closes #18543

r? @pcwalton