Use UFCS in the expansion of `#[deriving(Clone)]`

Changes the return expression of expanded `clone` method from e.g. `Slice((*__self_0).clone())` to `Slice(::std::clone::Clone::clone(&(*__self_0)))`

Fixes the [second half](https://github.com/rust-lang/rust/issues/15689#issuecomment-49086188) of #15689

(The [first half](https://github.com/rust-lang/rust/issues/15689#issue-37918558) will be fixed by #18467)

**Note** #18523 must be merged first or this will ICE during `make`

r? @alexcrichton 
(I can squash the commits after the review)
Interesting... well let's see what bors says!