Use RMG.log as log file name in generateReactions.

The RMG.initializeLog() method currently assumes that the log file is
named RMG.log as part of how it backs up the log file. This change is
needed in order to be able to run generateReactions.
Added (hardcoded) functionality for handling rings when generating frequencies.

In the new implementation, if a heavy atom in the molecule is in a cycle,
then a new functional group ringCH is incremented for each C-H bond in the
cycle. This is done instead of descending the functional group tree to
find the most specific group. This must be hardcoded as a special case
because our adjacency list representation is not well equipped to handle
"C-H bond with the carbon atom in a cycle" as a functional group.

This was tested with ethylene oxide (C1OC1). A QC calculation showed that
the lowest frequency in this molecule is ~800 cm^-1. With the old
algorithm, the system was overspecified and contained several frequencies
in the 300-800 cm^-1 range. Worse, the frequencies did not actually
reflect the heat capacity they were fitted to, leading to invalid Keq
values when running the pdep code. The new algorithm performs much better.
Added _fingerprint attribute to Molecule class.

This introduces the concept of a molecular "fingerprint": a short string
containing selected information about the molecule. This is particularly
useful in graph isomorphism comparisons, as it's always much faster to
compare the fingerprint than to do a full isomorphism test. Two fingerprint
strings matching is a necessary (but not sufficient) condition for the
associated molecules to be isomorphic. The fingerprint is cached so that
it only need be generated once per molecule.

For the moment the fingerprint consists of just the chemical formula. It
may be worthwhile to cache some other structural information as well
(e.g. bond types). The fingerprint isn't really meant to be accessible
outside the class, but you can use the getFingerprint() method if you
really want to see it.