Hopefully remove redundant spin states when generating reaction templates.

When you removed two radical electrons from an atom type in a functional group
that was {2S,2T} it would create an atom type that was {0,0}.
Hopefully this commit will make it only 0. 

Also, I think it removes a bug whereby previously if you removed 1 radical
electron from something that was 2S, it would become something with a 
single free radical, but a multiplicity of zero! (instead of two).

This should remove the {0,0} part of the RMG-database exporting issue
GreenGroup/RMG-database#18
https://github.com/GreenGroup/RMG-database/issues/18
Slight speed tweaks for applying actions to atoms.

To do with local scoping - avoid looking up action[0] and converting
it to an upper case string every time you want to compare it 
with something,  and avoid checking to see if self has 
an attribute called radicalElectrons every time you want 
to compare it with an integer.
Tweaks for writing old RMG-Java style database.

1) Replace '{2S,2T}' with '2' when saving group adjacency lists in a dictionary,

2) Save temperature ranges on every entry in a family's rate library.
   (If the rate was entered without a range - tss tss - then we put 1-9999 K.)

3) make a puneHeteroatoms() method on thermo databases so you can delete species
   from the thermo libraries that Java would not like (things containing Nitrogen)

Deals in part with issue GreenGroup/RMG-database#18
https://github.com/GreenGroup/RMG-database/issues/18
Revamp the way ScalarQuantities store and process uncertainties.

In commit 851b2ba42b60488e38267a0b8f231e6ee34cceff it was changed so that
Quantitiy.value and Quantity.uncertainty were now in customizable units,
and Quantitiy.value_si was the SI value. However, there was no uncertainty_si.

Now the uncertainty is also stored in SI units, like the value, and converted
to output units on demand. This change should be transparent, i.e. not change 
anything that was correct before, but it does create a new Quantity.uncertainty_si 
property, which is what we should have been using instead of .uncertainty in 
various places. i.e. we now need to go around using this to fix other bugs,
such as @GreenGroup/RMG-database#21 https://github.com/GreenGroup/RMG-database/issues/21

Also to do: do the same thing for the ArrayQuantity class.
Use the new uncertainty_si property to fix units bug in saving old database rules.

This should close @GreenGroup/RMG-database#21 https://github.com/GreenGroup/RMG-database/issues/21
But there are probably other places the same bug exists (i.e. foo.uncertainty should be replaced
with foo.uncertainty_si)

Also, why don't any of the Quantity unit tests check uncertainties at all? Hmm...
Tweaks to layout of rate rules when exporting the RMG-Java style database.
Don't save unnecessary items in the dictionary when exporting old RMG-Java database.

The database entries list in RMG-Py contains the reverse template, and potentially 
other unused nodes. These can cause problems when trying to read the dictionary in to RMG-Java.
See @GreenGroup/RMG-database#22. 

This commit makes it so anything that is not referred to in the tree, is commented out
when you save the database. The difficulty is that some nodes are not explicitly mentioned
in the tree, but are needed to fully define some logic node that IS in the tree.
It ends up a little complicated recursing through these cases, but it seems to work.

Closes @GreenGroup/RMG-database#22.
Saving old database creates kinetics_groups/families.txt file.

By default all families are listed and turned on.
This should make the 'as saved' database more nearly ready for
running straight in RMG-Java