Add ParticleSystemRepresentation

* Add a ParticleSystemRepresentation to the Particles library. This
  representation is an abstract class for managing particles.

* Add a Particle class, that stores position, velocity and lifetime.

* Add a ParticleReference class that refers to particles stored in the
  ParticleSystemRepresentation.

* Add a ParticlesState class which is used by the
  ParticleSystemRepresentation to store its internal data.
Remove PImpl in Common Device

Remove the pimpl implementation in the common device because it isn't
neccessary (as opposed to in actual devices where you may be hiding an
SDK). This also causes confusion between the "state" in actual devices.
Cleanup Particle classes

- Use VectorBlock instead of Block in ParticleReference, also use
  templated segment for faster access.
- Use isZero instead of checking if vector isApprox to zero.
- Clarify that adding particles to the ParticleSystemRepresentation
  copies the data.
- Fix bug that lifetime was being decrimented by 1, instead of dt.
- Assert when adding particles to an un-initilaized
  ParticleSystemRepresentation
- Fix bug where the other position was being copied into the velocity in
  a couple of the copy constructors
Merge branch 'feature/particle-system-representation' into 'master'

ParticleSystemRepresentation

+1: Gughan Sathyaseelan, haizhouW, Julien Lenoir

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1256643
Merge branch 'fix/device-pimpl' into 'master'

Remove PImpl in Common Device

+1: Ryan Beasley, Julien Lenoir, Gughan Sathyaseelan

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1278363