Fix build issues with GCC < 4.5

 + Space/or/Newline needed for loops with empty bodies
 + __host__ and __device__ redefined due to push/pop macros not existing on GCC < 4.5.
 + Missing #include for iterator_categories.

I think bringing in this `device_system_tag.h` header is too heavyweight for `iterator_categories.h`. It will essentially bring in the entire library, unfortunately. I am afraid of causing problems due to circular #inclusion and long compile times.

Instead, could you try simply declaring the `struct` `device_system_tag` within the `thrust` namespace at the top of the file?