Issue title: Bug with trait inheritance and trait objects
 Issue body: If you try to call an inherited method on an trait object, it instead calls a regular method of the trait itself, or potentially crashes if the signatures don't match.

Test case:

```
trait Base {
    fn baz(&self);
}

trait Super: Base {
    fn bar(&self);
}

struct X;

impl Base for X {
    fn baz(&self) {
        println("base baz");
    }
}

impl Super for X {
    fn bar(&self) {
        println("super bar");
    }
}

fn main() {
    let n = X;
    let b = &n as &Base;
    let s = &n as &Super;

    n.baz();   // base baz
    n.bar();   // super bar

    println("");

    b.baz();   // base baz
    //b.bar(); // Base has no bar()

    println("");

    s.baz();   // BUG: super bar - should be base baz
    s.bar();   // super bar
}
```

 Comments: 
 Comment 0: I have solved this bug, here is patch:

```
diff --git a/src/librustc/middle/typeck/check/method.rs b/src/librustc/middle/typeck/check/method.rs
index 48d630b..36c9b30 100644
--- a/src/librustc/middle/typeck/check/method.rs
+++ b/src/librustc/middle/typeck/check/method.rs
@@ -372,7 +372,7 @@ impl<'self> LookupContext<'self> {
     // to a trait and its supertraits.
     fn get_method_index(&self,
                         trait_ref: @TraitRef,
-                        subtrait_id: ast38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5Id,
+                                               subtrait: @TraitRef,
                         n_method: uint) -> uint {
         let tcx = self.tcx();

@@ -382,15 +382,14 @@ impl<'self> LookupContext<'self> {
         // we find the trait the method came from, counting up the
         // methods from them.
         let mut method_count = 0;
-        do ty38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5h_bound_trait_and_supertraits(tcx, &[trait_ref])
+        do ty38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5h_bound_trait_and_supertraits(tcx, &[subtrait])
             |bound_ref| {
-            if bound_ref.def_id == subtrait_id { false }
+            if bound_ref.def_id == trait_ref.def_id { false }
                 else {
-                method_count += ty38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5trait_methods(tcx, bound_ref.def_id).len();
+                method_count+=ty38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5trait_methods(tcx, bound_ref.def_id).len();
                 true
             }
         };
-
         return method_count + n_method;
     }

@@ -418,9 +417,9 @@ impl<'self> LookupContext<'self> {
         let trait_ref = @TraitRef { def_id: did, substs: rcvr_substs.clone() };

         do self.push_inherent_candidates_from_bounds_inner(&[trait_ref])
-            |trait_ref, m, method_num, _bound_num| {
+            |new_trait_ref, m, method_num, _bound_num| {
             let vtable_index =
-                self.get_method_index(trait_ref, trait_ref.def_id, method_num);
+                self.get_method_index(new_trait_ref, trait_ref, method_num);
             // We need to fix up the transformed self type.
             let transformed_self_ty =
                 self.construct_transformed_self_ty_for_object(
```

 Comment 1: Hmmm, seems that I cannot post it here ;)

 Comment 2: I edited some backticks into your comment so we could see the diff a little better, but feel free to open a pull request! It tends to be easier to review the patch in a pull request than on a bug report...

 Comment 3: https://gist.github.com/bmaxa/6680566 I have posted to gist , don't know how to make pull request ;)

 Comment 4: @bmaxa: https://help.github.com/articles/creating-a-pull-request

 Comment 5: Done ;) url for git is https://github.com/bmaxa/changes_and_fixes/tree/fixes

 Comment 6: @bmaxa You need to actually open an Pull Request.

 Comment 7: Heh I made pull request to my repository, didn't knew I have to fork first then compare with mozilla/rust
and make request there ;)

 Comment 8: Triage: This was fixed in a8a69ec15dce8bed5827d02e92cdb9fe2857b829 (contains a regression test)

{'source': 'GithubIssues', 'repo_name_with_owner': 'rust-lang/rust', 'issue_id': 19863602, 'repo_stars': 73938.0}