the for loop is desugared using the IntoIterator trait, and &var actually desugared as (&var).into_iter(), for the standard containers, IntoIterator is implemented for the references (e.g. impl<'a, T> IntoIterator for &'a Vec<T>).
note, the desugar of for loop doesn't go through Deref.
It does not. You can confirm this for yourself from the documentation: for example, find slice::iter_mut(), then scroll up to find the impl it belongs to ("Summary", collapsed items, view may be useful for this) and you will find impl<T> [T] — an inherent (non-trait) impl. You can tell it is not a trait impl because it does not have the “for” keyword in it — trait impls always look like impl MyTrait for MyType (with optional additional things on top of that) and inherent impls don't have the “MyTrait for” part.
The iter_mut method is not part of a trait directly, however by convention, a collection type would also offer the same functionality through IntoIter on a mutable reference.
For example: Vec<T> (via, [T]) has the .iter_mut method, but also, there's the implementation IntoIter for &mut Vec<T> (and also for &mut [T]) which offers the same functionality (it literally juts calls .iter_mut internally), powering in particular for x in &mut some_vec syntax to work as expected.
IntoIterator is used to convert an object into a type that implements Iterator. The actual iteration is implemented via the Iterator trait, specifically via the Iterator::next method.