Use defvar for rust-top-item-beg-re instead

Since rust-top-item-beg-re hasn't been defined yet, using defvar instead of
setq is more appropriate here (and also silences compilation warnings).
Implement fallbacks for functions unavailable in older versions of Windows
Add documentation for Windows compatibility layer and remove unneeded attributes
Move Windows compatibility layer to libnative
librand: Revise crypto part of document

This patch adds document which explains when to use `OSRng` in
cryptographic context, and explains why we use `/dev/urandom` instead
of `/dev/random`.
Reorganise driver code.

The goal of this refactoring is to make the rustc driver code easier to understand and use. Since this is as close to an API as we have, I think it is important that it is nice. On getting stuck in, I found that there wasn't as much to change as I'd hoped to make the stage... fns easier to use by tools.

This patch only moves code around - mostly just moving code to different files, but a few extracted method refactorings too. To summarise the changes: I added driver::config which handles everything about configuring the compiler. driver::session now just defines and builds session objects. I moved driver code from librustc/lib.rs to librustc/driver/mod.rs so all the code is one place. I extracted methods to make emulating the compiler without being the compiler a little easier. Within the driver directory, I moved code around to more logically fit in the modules.
rustdoc: Fix search links to enums/typedefs

When the values in html::item_type were updated, the JS definitions were
accidentally not updated as well.

Closes #14095
Clarification of Slice, Vector and Array

Especially in the tutorial beginners should not be confused with
wrong terminology. It helps to know the right names for things
when you want to find something in the documentation.
Implement Mutable trait for StrBuf.
auto merge of #14101 : alexcrichton/rust/issue-14095, r=kballard

When the values in html::item_type were updated, the JS definitions were
accidentally not updated as well.

Closes #14095
hashmap: port to the new allocator API
sync::deque: port to the new allocator API
auto merge of #14108 : thestinger/rust/jemalloc, r=huonw
mk: Bundle jemalloc with make dist

The dist tarball doesn't depend on git, so all git submodules must be included
inside of it.
mark rust_malloc/rust_free as unsafe

Support for this was added by 08237cad8d2ce9287aedf99e57384407cc9dc42d.
heap: add a way to print allocator statistics
auto merge of #14102 : moonglum/rust/slice-clarification-in-readme, r=kballard

There are no arrays in Rust, they are slices. Especially in the tutorial beginners should not be confused with wrong terminology. It helps to know the right names for things when you want to find something in the documentation.

@erickt explained that today to me and it helped me a lot when getting started :wink: Maybe we should also explain what a slice and what a vector is in the tutorial. If you like that, I will try to do that and attach that to the pull request :wink:
heap: replace `exchange_free` with `deallocate`

The `std::rt::heap` API is Rust's global allocator, so there's no need
to have this as a separate API.
auto merge of #14110 : SSheldon/rust/strbuf_mutable, r=alexcrichton

Despite implementing the Container trait, StrBuf did not implement the Mutable trait and had no clear method; this request implements the clear method of the Mutable trait for StrBuf.

Testing done: added a test and ran `make check` without any failures.
make sure jemalloc valgrind support is enabled

This requires pointing it at the valgrind headers we carry in-tree.