ARM C ABI implementation
Add non-exhaustive check for match guards

Fix ICE while there is no remained arms after checking guards
Change imported macros to use leaky modules rather than leaky functions.
Hoist macro defs out of inner function
Remove space from the middle of path
Adds (more) test cases for auto_encode.
Macros now leave scope

Macro scope is now delimited by function, block, and module boundaries,
except for modules that are marked with #[macro_escape], which allows
macros to escape.
typo-fixing and name-changes
librustc: offer suggestions for unresolved names.
Move levenshtein distance fn to core::str.
Adjust error messages for compile-fail tests.
Fix --disable-optimize-llvm
auto merge of #5115 : sanxiyn/rust/arm-abi, r=brson

Type size and alignment code needs to be factored, but I didn't want to interfere with MIPS port. Can be done later.

Fix #4797.
auto merge of #5096 : luqmana/rust/spell, r=catamorphism

Address #2281


```
-> % cat foo.rs
fn foo() -> int {
    let bar = 10;

    bad
}
```

```
-> % rustc foo.rs
foo.rs:4:4: 4:7 error: unresolved name: `bad`. Did you mean: `bar`?
foo.rs:4     bad
             ^~~
error: aborting due to previous error
```
Add a 'start' lang item and use it instead of rust_start
auto merge of #5120 : jbclements/rust/macros-have-scope, r=pcwalton

r?

After this patch, macros declared in a module, function, or block can only be used inside of that module, function or block, with the exception of modules declared with the #[macro_escape] attribute; these modules allow macros to escape, and can be used as a limited macro export mechanism.

This pull request also includes miscellaneous comments, lots of new test cases, a few renamings, and a few as-yet-unused data definitions for hygiene.
auto merge of #5134 : brson/rust/disable-optimize-llvm, r=brson
auto merge of #5135 : brson/rust/start, r=pcwalton

r?

#3406

Pretty straightforward. I'm using opaque pointers instead trying to get trans and core to agree on the types of the main function and crate map. One oddity is that this required changing the order of the `-lrustrt` argument to the linker in order to resolve `upcall_new_stack`. Linkers are mysterious.
treemap: improve the lazy iterator

* replace the dual next() and get() calls with a single next() function
* drop one of the pointer members from the struct
* add a method for using the lazy iterator with a for loop
auto merge of #5123 : thestinger/rust/treemap, r=nikomatsakis

* replace the dual next() and get() calls with a single next() function
* drop one of the pointer members from the struct
* add a method for using the lazy iterator with a for loop