make Option::cloned generic over Deref, make cloned's tests actually run, add Cloned iterator adaptor

Edit: whoops, didn't mean to hit post.

Anyway, this is something I tried to do when I first implemented cloned, but couldn't figure out. Somewhere between then and the PR actually landing, we got Deref of references, so now this works! :tada: 

Also turns out the test for the functionality was never marked as a #[test]. Oops!

Also added a Cloned iterator adaptor. If this isn't desirable, it can be taken out of the PR (seperate commits).
It's generic, so it's already a candidate for cross-crate inlining. Otherwise I'd rather avoid adding more #[inline]s to std without any performance information.