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)
These imports get flagged by the `#[deny(unused_imports]` lint on stage1. But the compiler bootstraps fine after I removed them (I did `make clean` before trying a new `make`). So... yeah I'm not sure why this actually works.