For reacting A + A, make a copy of A once for all families.

This is necessary to allow the two copies to be manipulated independently.
Before we were doing this in each call to __generateProductStructures(),
which meant it was occurring twice per family. Deep copies of molecules are
expensive, and this eliminates some of them.
Remove needless deep copy of reactants in KineticsFamily.__generateReactions().

These are only a small contributor to the number of deep copies of
molecules made, but every little bit helps.
Possibly faster version of Graph.copy().

We spend a lot of time making deep copies of molecules, so any speed boost
here would be valuable. (This is the tradeoff we made in making the
graph isomorphisms themselves faster.) In this commit we eliminate the
expensive calls to list.index(), instead keeping a dict with a mapping of
vertices from the original to the copy.