[cxx-interop] Detect explicit iterator_traits<Iter> specializations
C++ supports two mechanisms for declaring that some user-defined type
struct Iter is some kind of iterator:
(1) it has a member Iter::iterator_category/_concept that is a typedef
of (a subtype of) std::some_iterator_tag
(2) it has an explicit specialization of std::iterator_traits<Iter> that
contains a typedef of (a subtype of) std::some_iterator_tag
We previously did not detect the latter case for C++ interop.
This patch adds detection for the latter case, so that a (valid)
explicit specialization of std::iterator_traits<Iter> will produce
a protocol conformance to Cxx*Iterator when Iter is imported.