Diagnostics Framework

Added a diagnostics framework. The user can specify the diagnostics to be performed during the simulation. The UI specifies how it handles the data produced by the diagnostics methods.
In the case of the MainBatch UI the user needs to specify a directory where the output files should be saved. Otherwise the program will run without any output. This should be the second parameter! (the first one specifies the location of the settings file)

##Design##
Each diagnostic implements the Diagnostics inteface. This provides the following methods.
calculate(Grid, particles) - perform the calculations with the provided data as input.
getData(DataOutput) - when this is called the diagnostic gives its data to the DataOutput object.
getNextIteration() - we do not want each diagnostic to tun in each time step, this can be used to check whether the diagnostic should be performed or not.
checkIfNewData() - there is no point in calling getData two times in a row if calculate was not called in between. This helps to check whether calculate has created new data.

The DiagnosticScheduler knows about all the enabled diagnostics and loops through them either to perform the diagnostics or to give output data. It also checks the intervals of each diagnostic. Therefore its two methods
performDiagnostics(int iteration)
output(DataOutput)
should be called in each iteration of the simulation.

The UI can implement the DataOutput interface in different ways. This interface provides a method for every diagnostics which is accesed in the specific diagnostic class when getData is called. This is done because each diagnostic class can have its own kind of output. But there certainly might be a more elegant solution!

MainBatch implements DataOutput in a the way that it either does nothing (EmptyDataOutput) or writes to files. This can also be done in a better way. logback (http://logback.qos.ch/) might provide more performance.

The diagnostics can also be enabled in the parser. The user can enable them with
<diagnostics i="integer that specifies the interval">NAME</diagnostics>
Setting the interval to 0 performs the diagnostics only at the beginning. Setting it to be equal to the number of iterations performs the diagnostics at the beginning and at the end.