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).
Remember that with DST, `Deref<T>` is actually a type (and in general `Foo<Deref<T>>` is a thing). This comment probably should be the more verbose "Maps `Option<T>` to `Option<U>` by derefencing and cloning".