use available_externally linkage for cross-crate inlined functions

Cross-crate inlining currently uses `internal` linkage for functions that have been inlined from other crates.  This works fine if the rustc-inlined copy of the function actually gets LLVM-inlined at all of its call sites, but if that doesn't happen, then we end up with an extra copy of the function in the object code.  Using LLVM's `available_externally` linkage allows LLVM to perform inlining, but prevents the extra object code from being generated.

cc #14527