Convert rmgpy.molecule.graph to Cython .pyx file.

Since graph manipulation speed is a critical bottleneck for RMG-Py jobs,
I think abandoning pure Python mode is worth the potential speed boost.
This commit provides a straight translation from the pure Python syntax
to the equivalent Cython syntax.
Moved VF2 isomorphism algorithm to new rmgpy.molecule.vf2 module.

This is another advantage of using .pyx files: better dependency handling
across related modules.
Faster versions of Atom.copy() and Bond.copy().

The previous implementation was falling back to pure Python. The new
version uses the ExtType.__new__(ExtType) trick to directly instantiate
the extension type object in C. The attributes then need to be populated
manually. This is done inside copy() rather than calling __init__() for
speed reasons.

This change alone should give a 5-10% speed boost, since we spend a lot of
time copying atoms and bonds when generating reactions. Molecule.copy()
should no longer be a significant presence on the CPU profile output.
Don't use pybel in Molecule.getFormula().

Converting to OBMol is expensive enough that we don't want to be doing it
to generate our molecular fingerprint. Instead I've written an algorithm
that gets the chemical formula directly from our molecular representation.