Ported check_const from oldvisit to <V:Visitor> trait API.
Ported check_loop from oldvisit to <V:Visit> trait API.
Port check_match from oldvisit to <V:Visitor> trait API.
Port const_eval from oldvisit to <V:Visitor> trait API.
Ported effect checker from oldvisit to <V:Visitor> trait API.
Port privacy.rs from oldvisit to <V:Visitor> trait.
port reachable.rs from oldvisit to <V:Visitor> trait.
port region.rs from oldvisit to <V:Visitor> trait API.
port resolve.rs from oldvisit to <V:Visitor> trait.
Ported trans/base.rs from oldvisit to <V:Visitor> trait API.
Ported liveness.rs from oldvisit to <V:Visitor> trait API.
Ported typeck::collect from oldvisit to <V:Visitor> trait API.
port callee.rs from oldvisit to <V:Visitor> trait API.
port type_use.rs from oldvisit to <V:Visitor> trait.
Ported typeck/check/mod.rs from oldvisit to <V:Visitor> trait API.
Port regionck from oldvisit to <V:Visitor> trait API.
Implement `{:s}` for ~str and @str as well
Delegate `{}` to Default instead of Poly

By using a separate trait this is overridable on a per-type basis and makes room
for the possibility of even more arguments passed in for the future.
auto merge of #8564 : alexcrichton/rust/ifmt+++, r=graydon

See discussion in #8489, but this selects option 3 by adding a `Default` trait to be implemented by various basic types.

Once this makes it into a snapshot I think it's about time to start overhauling all current use-cases of `fmt!` to move towards `ifmt!`. The goal is to replace `%X` with `{}` in 90% of situations, and this commit should enable that.
Issue #3678: Remove wrappers and call foreign functions directly