Exclude energy particles from pmap loops which don't need them

Also fix a few places where parts[].type was being changed directly instead of via part_change_type