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
Ah, crap. OK, I will revert my change.