`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
What if I want to write a generic method that works on all groups? According to this I would write
```rust
fn f<T: Mul+One+Div>(...
```
Naturally this algorithm also works for all abelian groups, but how does the compiler know that? The biggest argument for this RFC seems to be that abstract algorithms can make certain assumptions, but does this scheme even support abstract algorithms?