Add @Spell clusters to Vim syntax file

Add @Spell clusters to Vim syntax highlighting file to do spell checking
only inside comments and strings
Introduced a chapter that describes how to perform callbacks from C to Rust
Further details on channel idea
Update guide-ffi.md

Simplified the first examples to demonstrate callbacks without other threads involved and shortened the elaboration about async callbacks.
doc: Boxes diagram shows enum value inside box.
doc: add note below diagram about memory layout.
Fixed bug when initialising bitv from bool=true
Fixed typos in comments of librustc backend.
rustc: Feature gate `log_syntax!`. Closes #11602
handle zero-size allocations correctly

The `malloc` family of functions may return a null pointer for a
zero-size allocation, which should not be interpreted as an
out-of-memory error.

If the implementation does not return a null pointer, then handling
this will result in memory savings for zero-size types.

This also switches some code to `malloc_raw` in order to maintain a
centralized point for handling out-of-memory in `rt::global_heap`.

Closes #11634
Actually force a / in the path for ext crates

If the library is in the working directory, its path won't have a "/"
which will cause dlopen to search /usr/lib etc. It turns out that Path
auto-normalizes during joins so Path::new(".").join(path) is actually a
no-op.
Make WindowsPath::new("C:foo").root_path() return Some("C:")
Expose platform independent path separators
Ignore all newline characters in Base64 decoder

Ignore all newline characters in Base64 decoder to make it compatible
with other Base64 decoders.
Disallow implementation of cross-crate priv traits

Turns out we were just forgetting to encode the privacy for trais, and
everything without privacy defaults to public!

Closes #11593
Added benchmark for pow and pow_with_uint
Replace old pow_with_uint with the new pow func

There was an old and barely used implementation of pow, which expected
both parameters to be uint and required more traits to be implemented.
Since a new implementation for `pow` landed, I'm proposing to remove
this old impl in favor of the new one.

The benchmark shows that the new implementation is faster than the one
being removed:

test num::bench::bench_pow_function               ..bench:      9429 ns/iter (+/- 2055)
test num::bench::bench_pow_with_uint_function     ...bench:     28476 ns/iter (+/- 2202)
Consistent formatting for args and attrs
xfail more external syntax extension tests on android
auto merge of #11632 : brson/rust/issue-11602, r=huonw