Add thermodynamic potentials

Not ready to be merged. Opening for comments/suggestions.
This line does not correctly handle the case when one of the "not_in_site" elements only has one atom.  For instance, the following will crash:

ProcessSolidSolutionChemistry( [ '[Mg]2SiO4', '[Fe]2SiO4' ])

But this runs correctly:

ProcessSolidSolutionChemistry( [ '[Mg]2Si1O4', '[Fe]2Si1O4' ])