clean up tests for rates.

also add some comments and do some sanity checking at the start.

I'm starting to add support for product and reactant groups larger than
1
add support for reactant and product sets larger than 1

this is still not tested
add test for graph transformation with minima
move KineticMonteCarlo test to tests folder
add a test comparing KMC and NGT
fix bug in NGT

the final average was not computed correctly.

Add more test comparing NGT and KMC
add support to NGT for equilibrium occupation probabilities
implement equilibrium occupation probabilities for rates

I also added a function get_ndof() to the base system.  It tries to
compute the correct value from len(self.get_random_configuration()) -
self.get_nzero_modes()