Add an implementation of FromStr for ~str and @str

This fixes an issue for APIs that return FromStr. Before this change,
they would have to offer a seperate function for returning the source
string.
extra: %W and %+ support in time::strftime

Plus testing added for %X and %x which were supported but not tested.

Working towards #2350
auto merge of #9689 : luisbg/rust/strftime, r=alexcrichton

Plus testing added for %X and %x which were supported but not tested.

Working towards #2350
auto merge of #9681 : skade/rust/str-from-str, r=huonw

This fixes an issue for APIs that return FromStr. Before this change,
they would have to offer a seperate function for returning the source
string.
Rewrite lint passes with less visitor cruft

This purges about 500 lines of visitor cruft from lint passes. All lints are
handled in a much more sane way at this point. The other huge bonus of this
commit is that there are no more @-boxes in the lint passes, fixing the 500MB
memory regression seen when the lint passes were refactored.

Closes #8589