IFG Algorithm.

Implementation of

    An algorithm to identify functional groups in organic molecules
    Peter Ertl

    https://jcheminf.springeropen.com/articles/10.1186/s13321-017-0225-z


Authors:
    Richard Hall,
    Guillaume Godin modified function output to be more readable


    Usage:
    ```python
        # return the list of IFG (atomIds, atoms & type) for a molecule object:
        m = Chem.MolFromSmiles(smiles)
        fgs = identify_functional_groups(m)
        print fgs
    ```
    Output example:
        [IFG(atomIds=(2,), atoms='n', type='cnc'),
         IFG(atomIds=(4, 5, 6, 7), atoms='NS(=O)=O', type='cNS(c)(=O)=O'),
         IFG(atomIds=(12,), atoms='N', type='cN'),
         IFG(atomIds=(15,), atoms='n', type='cnc')]

Notes:

This implementation of Ertl paper was made by Richard Hall in summer 2017.
Cause RDKit and Peter tool can have distinct aromaticity dectection behaviours, list
of functionnal groups in aromatic rings may differ in presence of conjugated aromatics rings.
