A QList is fast for insert/delete (this is good if we ever decide to push around a lot of particles) but never frees its memory except on delete and the assignment operator (this is bad when there are lots of particles -- it will become a resource leak).  I made it a pointer so that we could copy/delete/swap when... damn!  I just realized that a pointer is not necessary when since QList has the swap() operator!

I think I made this optimization too soon. I probably should have waited to see if the inefficiencies from std::vector::erase(i) ever became a problem.  A std::vector provides memory coherency which helps (every suimulation frame) when pushing lots of particles but it can be expensive to remove from the middle (which might NOT happen every frame?) so the performance win of a QList is not clear.