Add path suffix lookup

Extended `ast_map::Map` with an iterator over all node id's that match a path suffix.

Extended pretty printer to let users choose particular items to pretty print, either by indicating an integer node-id, or by providing a path suffix.

 * Example 1: the suffix `typeck::check::check_struct` matches the item with the path `rustc::middle::typeck::check::check_struct` when compiling the `rustc` crate.

 * Example 2: the suffix `and` matches `core::option::Option::and` and `core::result::Result::and` when compiling the `core` crate.

Refactored `pprust` slightly to support the pretty printer changes.

(See individual commits for more description.)

This duplication could be reduced with something like the following, right? (Requires adjusting `matches_named` to take a `&str`, not a `N`.)

```rust
let (p, n) = match self.map.find_entry(idx) {
    Some(EntryItem(p, n)) => (p, n.name()),
    Some(EntryForeignItem(p, n)) => (p, n.name()),
    Some(EntryTraitMethod(p, n)) => (p, n.name()),
    // ..
    _ => continue
};
if self.matches_named(p, n.as_str()) {
    return Some(idx);
}
```