Derive device iterator categories from

detail::iterator_category_with_system_and_traversal to satisfy libc++'s
implementation of std::iterator_traits' requirement that iterator
categories be convertible to standard iterator categories.

Fixes #581