moved force functions to particle class
optimized performance, refracted out particle

- Refracted out Particle class
- Change the way constraints are stored/calculated so during
update/rendering, we don't iterate over duplicate constraints (instead
of O(n^2) it is now O(n))