Switch to context manager for {Multi}Dat.vec{_ro}

In the case of a MixedDat, we scatter the arrays into a contiguous
vector and after the vector operation we scatter the result back into
the original arrays. This is achieved with a context manager which
takes care of the reverse scatter automatically when exiting the
context. For API consistency a context manager is also used for a
scalar Dat.

This requires changing all uses of vec and vec_ro in tests etc.
Documentation for {Multi}Dat.vec{_ro} context managers
No longer using VecNest, so restore preconditioners