Derive device iterator categories from iterator_category_with_system_and_traversal to satisfy
libc++'s implementation of std::iterator_trait's requirement that iterator categories must be
convertible to a standard iterator category.

Fixes #581