OEChem molecules contain atoms and bonds which have APIs described by the
OEAtomBase and OEBondBase abstract base-classes respectively. Atoms and bonds
in OEChem can only be created and destroyed in the context of an
OEChem molecule. While they can be accessed as pointers through various
member functions of molecules, their memory is owned by the molecules and
they are deallocated during the molecules destruction. Attempting to use
references to atoms or bonds of a molecule after the molecule has gone out
of scope results in undefined behavior.