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.)

I think a freestanding `from_str` function is in the prelude.

Also, you could abbreviate the `match` slightly, if you felt like it.

```rust
from_str(s).map(ItemViaNode)
    .or_else(|| {
        let v = ItemViaPaths.split_str("::").map(|x| x.to_string()).collect();
        Some(ItemViaPath(v))
    })
```