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)
Most crates (those that don't use `#[no_std]`) don't link to the `core` crate, hence `::core::clone::Clone` yields "error: failed to resolve. Maybe a missing `extern crate core`?".

Users of `#[no_std]` can use this [work around](https://github.com/rust-lang/rust/issues/18491#issuecomment-61293267) to access this syntax extension.