Removed dependency on STL iterator_traits

I simply implemented the standard for iterator_traits but in the thrust namespace.

I also updated the specializations for thrust::pointer iterators to use our new type
Did you see what happens if you eliminate these specializations?

These specializations are a workaround to avoid a problem with an older version of `nvcc`. I suspect we don't need them anymore. If that's the case, now would be a great time to eliminate them.