collections: impl Deref for Vec/String

This commit adds the following impls:

    impl<T> Deref<[T]> for Vec<T>
    impl<T> DerefMut<[T]> for Vec<T>
    impl Deref<str> for String

This commit also removes all duplicated inherent methods from vectors and
strings as implementations will now silently call through to the slice
implementation. Some breakage occurred at std and beneath due to inherent
methods removed in favor of those in the slice traits and std doesn't use its
own prelude,

cc #18424
Ah sorry I don't have the precise one offhand, but talking with @nikomatsakis it sounded like he was running into a very similar ICE (in this crate even!) and was fixing it, so I think this may fix itself soon.

The ICE was in `ty::type_contents` with a lookup in a map failing, and the context was somewhere in the bowels of trans (the immediate caller was `expr_use_visitor::consume_expr`. With the fix probably coming soon though I may just leave this for now.