librustc: offer suggestions for unresolved names.
Move levenshtein distance fn to core::str.
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
```