`Combine` trait for string and collection concatenation

Rendered: https://github.com/apoelstra/rfcs/blob/compose-trait/active/0000-compose-trait.md

cc https://github.com/rust-lang/rust/issues/16541
This "everywhere" isn't really true, since there are other programming languages that use + noncommutatively.