Check type when struct is matched against enum-like pattern

Previously check always succeeded because struct type was derived from
the matched expression, not the matched pattern.
use range assert when loading enum discriminant

Closes #4924
add range assert when loading bools
replace explicit loops with foldr
auto merge of #5044 : thestinger/rust/range, r=pcwalton

Closes #4924

There are some more `Load` calls that could use this, so it's not completely done yet.
vim improvements

1. Highlight new lifetime syntax
2. Visually distinguish `unsafe` keyword
3. Add a new file that highlights column 78, to warn when lines get too long
Created libcore/private/intrinsics.rs, which aims to contain every
rustc intrinsic. Several files in libcore have been changed to use
these intrinsics.
As of yet, none of the intrinsics are documented.
Changed a test to use intrinsics.rs and changed a few lines that were too long, had bad whitespace, etc.
etc: Suppress the enum variant instruction scheduling Valgrind issues. rs=#rust
auto merge of #5046 : sanxiyn/rust/struct-match, r=catamorphism

Previously check always succeeded because struct type was derived from the matched expression, not the matched pattern.

Fix #4849.
Don't perform swap when src == dst. #5041
auto merge of #5043 : brson/rust/swap, r=brson

r?
rustc: Use position method in check::method

...because it appears to work now. Removes a FIXME.
auto merge of #5049 : bstrie/rust/vim, r=catamorphism

1. Highlight new lifetime syntax
2. Visually distinguish `unsafe` keyword
3. Add a new file that highlights column 78, to warn when lines get too long
librustc: Get rid of structural records save for front/test.rs.
Fix fallout in rusti & rustpkg.
librustc: tidy
Merge
Fix flipped tuple that was causing all that pain
Fix vdef pattern