- moves C++17 iterator_traits
- adds iterator_traits specialisation that supports all expected member aliases except for pointer
- adds iterator_traits specialisations for iterators that meet the legacy iterator requirements but might lack multiple member aliases
- makes pointer iterator_traits specialisation require objects
Depends on D99854.
I know I wrote this, but it'd be better if we used nested requires expressions so the requirements can be congruently ordered with the wording.