If you have a begin() const member, you don't need a begin() member unless you want it to do something different (e.g. have a different return type). So in general, view types don't need begin() non-const members.
Also, static_assert some things about the types in "types.h", so that we don't accidentally break those properties under refactoring.
(This came out of my attempts to make a "test_iterators.h" PR along the lines of @jloser's sized_sentinel<It>. It turned out that in many of the places we'll want to use sized_sentinel<It>, we currently have to use twice as much of it as necessary, because of all these places that use two free functions when one member would suffice. I believe I've been careful not to change any of the places that were actually trying to test our behavior on free begin/end, e.g. in the tests for std::ranges::begin.)
@ldionne @Mordante: I propose a separate commit to globally replace the name ContiguousView with MoveOnlyView, since that seems to be its actual raison d'etre. (This affects several of these "types.h" files.)