Better checking for same reactants in KineticsFamily.__generateReactions().

The previous implementation no longer worked because we moved where we make
a temporary copy of the duplicate reactant. The new version uses an
isomorphism check, which is safer. I don't think the speed penalty will be
too significant.

This fixes some incorrect degeneracies, e.g. the disproportionation reaction
C2H5 + C2H5 -> C2H6 + C2H4.
Also check for rate rules with swapped template for R_Recombination reactions.

Rate rules could be specified in either the A + B or B + A order in the
database. I'm not aware of any particular convention for this (or even if
one could be enforced), so we need to check both when looking up the
kinetics. If only one of them gives an exact match, then we will keep that
one. If both are exact or both are estimates, then we keep the one in the
order given; although I don't think this is the best way to do it.

An example is H + CH3 -> CH4, which has an exact rule for (C_methyl,H_rad)
but not for (H_rad,C_methyl). Now you will get the exact rule no matter
which order you specify the template in.
Fix SimpleReactor to use isobaric model.

The new implementation uses total moles instead of concentration for the
y(t) vector. The volume is not stored in y(t) since it can be computed
directly via the ideal gas law from the total moles, and we don't need to
compute dV/dt in this formulation.

I think the previous implementation was actually isochoric instead of
isobaric. Note that the minimal example returns the same result in either
case.