Use the angle of the drawn velocity vector to pick its color.
Untrue quickcheck property.

`distance a b` might not be the inverse of `distance b a`; `distance`
gives you a scalar value, so expecting direction to be preserved is
silly.
Do not generate particles with negative mass.
Refactored some code for readibility.
Derive Read instances.

That one test is killing me; this will help debugging.
Reorder operations so that gravitation a b = - (gravitation b a).

It's a Double precision issue; this way is nicer anyhow.
Allow negative masses.

I thought they were a source for that last test failure. I guess not.
This gives us a nicer instance, and there's no reason for that
constraint ...
Flipped the order of the parameters to `gravitation`.
More idiomatic 'update'.