Make method Vec::remove() public
rustc: disallow duplicate methods in trait impls

Closes #8153
remove duplicate methods in impls
rustc: test: don't silently ignore bad benches

This is adequate because when a function has a type that isn't caught here,
that is, it has a single argument, but it *isn't* `&mut BenchHarness`, it
errors later on with:

     error: mismatched types: expected `fn(&mut test::BenchHarness)` but found
     `fn(int)` (expected &-ptr but found int)

which I consider acceptable.

Closes #12997
rustc: buffer the output writer for -Z ast-json[-noexpand].

This takes the time for `rustc libstd/lib.rs -Z ast-json-noexpand >
file.json` from 9.0s to 3.5s (~0.5s spent parsing etc.) and `-Z
ast-json` from 11s to 5s (~1.5s spent parsing and expanding).
syntax: Don't parameterize the the pretty printer

The pretty printer constitues an enormous amount of code, there's no reason for
it to be generic. This just least to a huge amount of metadata which isn't
necessary. Instead, this change migrates the pretty printer to using a trait
object instead.

Closes #12985
`char`: s/character/Unicode scalar value/

Tweak the definition of `char` to use the appropriate Unicode terminology.
Move syntax-extension-hexfloat.rs

Move syntax-extension-hexfloat.rs to run-pass-fulldeps so it depends on libhexfloat being compiled before running.
Fix linkage1 test which fails due to --as-needed

It appears that the --as-needed flag to linkers will not pull in a dynamic library unless it satisfies a non weak undefined symbol. The linkage1 test was creating a dynamic library where it was only used for a weak-symbol as part of an executable, so the dynamic library was getting discarded.

This commit adds another symbol to the library which satisfies a strong undefined symbol, so the library is pulled in to resolve the weak reference.
rustc: remove linker_private/linker_private_weak

Remove the linker_private and linker_private_weak linkage attributes,
they have been superseded by private and private_weak and have been
removed in upstream LLVM in commit r203866.
rustc: remove obsolete linkage types

Remove obsolete linkage types from the llvm::Linkage enum.  The linkage
types are no-ops and weren't used inside rustc anyway.
libsyntax: librustdoc: ignore utf-8 BOM in .rs files
Closes #12974
closes #12967 fix [en|de]coding of HashMap<K,V> where K is a numeric type

serialize: ref #12697 minor adj. to last char check + prettyencode test
Add impl IntoStr for ::std::vec_ng::Vec<Ascii>
deny missing docs
Documentation and formatting changes for option.rs.
Relaxed the memory ordering on the implementation of UnsafeArc
Typo fixes.
Docsprint: Document ops module, primarily Deref.
rustdoc: Implement cross-crate searching

A major discoverability issue with rustdoc is that all crates have their
documentation built in isolation, so it's difficult when looking at the
documentation for libstd to learn that there's a libcollections crate with a
HashMap in it.

This commit moves rustdoc a little closer to improving the multiple crate
experience. This unifies all search indexes for all crates into one file so all
pages share the same search index. This allows searching to work across crates
in the same documentation directory (as the standard distribution is currently
built).

This strategy involves updating a shared file amongst many rustdoc processes, so
I implemented a simple file locking API for handling synchronization for updates
to the shared files.

cc #12554