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
Merge pull request #583 from jaredhoberock/issue-581

Derive device iterator categories from