rustdoc: Prevent infinite recursion when inlining

Cyclic pub-use chains triggered infinite recursion, and this commit adds a hash
set to guard against cyclic recursion. This will cause one of the reexports to
render as a `pub use` instead of inlining the documentation.

Closes #16274
rustdoc: Don't try to inline the crate root

Fixes other test cases found in #16274
libnative/io: datasync() wrongly called fsync().
Register new snapshots
liblibc and libnative: send() should use const buffers.
Fix iterator doc

OrdIterator: the doc says that values must implement `PartialOrd`, while the implementation is only for `Ord` values. It looks like this initially got out of sync in 4e1c215. Removed the doc sentence entirely since it seems redundant.

MultiplicativeIterator: Fixed weird sentence.
use emit_tuple_arg while serializing tuples
Rename `begin_unwind` lang item to `fail_fmt`, refs #16114
Rename `core::failure::begin_unwind` to `fail_impl`, refs #16114
Rename `fail_` lang item to `fail`, closes #16114
Rename `begin_unwind_string` to `fail_str`, refs #16114
Beef up Default documentation
auto merge of #17428 : fhahn/rust/issue-16114-rename-begin-unwind-2, r=alexcrichton

This is a PR for #16114 and includes to following things:

* Rename `begin_unwind` lang item to `fail_fmt`
*  Rename `core::failure::begin_unwind` to `fail_impl`
* Rename `fail_` lang item to `fail`
auto merge of #17492 : alexcrichton/rust/issue-16274, r=aturon

Details in the commits.
Integrate builtin bounds fully into the trait checker
Integrate caching of results. Measurements show approx 90% hit rate.
Move unsafe destructor check from kind.rs into wf.rs
Remove checks that are already being done during typeck
Remove redundant local variable checks.
Move checks for closure bounds out of kind.rs