Expand the deriving(ToStr) implementation
auto merge of #7204 : alexcrichton/rust/deriving-to-string, r=pcwalton

Closes #7180 and #7179.

Before, the `deriving(ToStr)` attribute was essentially `fmt!("%?")`. This changes it to recursively invoke `to_str()` on fields instead of relying on `fmt!`-style things. This seems more natural to me and what should actually be expected.