`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
`Add` trait is a interface, not an implementation. You couldn't assume whether it's a commutative or not.
Traits specify the interfaces not implementations.