vim: Update syntax file for Prelude changes.

Lots of Vector -> Slice renames.
Optimized IR generation for UTF-8 and UTF-16 encoding

- Both can now be inlined and constant folded away
- Both can no longer cause failure
- Both now return an `Option` instead

Removed debug `assert!()`s over the valid ranges of a `char`
- It affected optimizations due to unwinding
- Char handling is now sound enought that they became uneccessary
Add `use a::b::{c, mod};` to the manual
collections: deprecate BTree.

This is very half-baked at the moment and very inefficient, e.g.
inappropriate use of by-value `self` (and thus being forced into an
overuse of `clone`). People get the wrong impression about Rust when
using it, e.g. that Rust cannot express what other languages can because
the implementation is inefficient.
Add new keywords (particularly `where` & `virtual`) to editor modes.
Fix an error in a code sample in bitv.rs
auto merge of #16498 : Kimundi/rust/inline-utf-encoding, r=alexcrichton

The first commit improves code generation through a few changes:
- The `#[inline]` attributes allow llvm to constant fold the encoding step away in certain situations. For example, code like this changes from a call to `encode_utf8` in a inner loop to the pushing of a byte constant:

 ```rust
let mut s = String::new();
for _ in range(0u, 21) {
        s.push_char('a');
}
```
- Both methods changed their semantic from causing run time failure if the target buffer is not large enough to returning `None` instead. This makes llvm no longer emit code for causing failure for these methods.
- A few debug `assert!()` calls got removed because they affected code generation due to unwinding, and where basically unnecessary with today's sound handling of `char` as a Unicode scalar value.

~~The second commit is optional. It changes the methods from regular indexing with the `dst[i]` syntax to unsafe indexing with `dst.unsafe_mut_ref(i)`. This does not change code generation directly - in both cases llvm is smart enough to see that there can never be an out-of-bounds access. But it makes it emit a `nounwind` attribute for the function. 
However, I'm not sure whether that is a real improvement, so if there is any objection to this I'll remove the commit.~~

This changes how the methods behave on a too small buffer, so this is a 

[breaking-change]
auto merge of #16535 : michaelsproul/rust/vim-traits, r=pcwalton

The vim syntax highlighting file had become out of sync with the real prelude.

Lots of Vector -> Slice renames have happened recently.
librustc: Allow trait bounds on structures and enumerations, and check
them during kind checking.

This implements RFC #11.

Closes #15759.
auto merge of #16432 : pcwalton/rust/kindck-traits, r=nikomatsakis

them during kind checking.

This implements RFC #11.

Closes #15759.

r? @nikomatsakis
auto merge of #16537 : jakub-/rust/use-mod-manual, r=alexcrichton
auto merge of #16543 : huonw/rust/deprecated-btree, r=alexcrichton

This is very half-baked at the moment and very inefficient, e.g.
inappropriate use of by-value `self` (and thus being forced into an
overuse of `clone`). People get the wrong impression about Rust when
using it, e.g. that Rust cannot express what other languages can because
the implementation is inefficient: https://news.ycombinator.com/item?id=8187831 .
auto merge of #16547 : huonw/rust/new-kw, r=pcwalton
Make BigUint and BigInt Hash, fixes #16551
auto merge of #16550 : kaseyc/rust/fix_documentation_error, r=alexcrichton
auto merge of #16558 : Gankro/rust/hashbig, r=pcwalton

Pretty self-explanatory. Only annoying thing is that it *seems* that I had to add `#![feature(default_type_params)]` to libnum because of Hasher. Don't know if there's a way around that.

Fix #16551
Fix type checking of struct fields in patterns of type ty_err

Fixes #16338.
Fixed #16401.
auto merge of #16554 : jakub-/rust/struct-pat-fields-ty-err, r=pcwalton

Fixes #16338.
Fixed #16401.