Particle Loader

Design
----------

First the user needs to specify the types of particles s/he wants to use by creating ParticleFactory classes for them. All the parameters should be known when the constructor is called. There are no setters. This is to prevent that we have unfinished particles and partcle factories flying around. The parameters for the ParticleFactory are all particle related and are not dependent on the simulation.
The desired position and velocity distributions that should be applied to the particles are identified through enums that are also stored in the ParticleFactory class.

When the ParticleFactories are greated they are put in a list and given to the ParticleLoader together with global simulation parameters like the width and height. The loader then iterates through all the factories and creates particles according to the data specified there. It then deletes the factories and outputs a list of all particles.

Some distributions are provided too. Be careful with the ConstantSpacing distribution. Most of the time it will not work. The math for the maxwellian was taken from Cartwright (2000, doi:10.1006/jcph.2000.6549) as well as the book by Birdsall, Chapter 16.

The GUI still uses the old way to load particles, i.e. the createRandomParticles() method from the InitialConditions class. A new setter needed to be introduced to the Settings class to ensure that this is still possible. 

PS: First tests showed that the simulation is heavily dependent on whether a seed like 0 or 1 is used for the random distributions or a "more random" one from Math.random(). With 0 and 1 one can observe relaxation effects.