add props attribute in constructor as parameter and default to empty dict

this is more flexible than setting it in the constructor to an empty dict.
This way, one can also transfer a properties dict from elsewhere.
make Species hashable by incorpating __eq__ and __hash__ methods

this allows us to use them in data types in which object equality
is checked.

The __hash__() method uses the InChI Key which is basically a hash of
the inchi

The __eq__() method uses the native isIsomorphic(...) method which
may put some computational burden on the method.
add getAllBonds that returns a list of unique bonds in Molecule

added a test that checks the number of bonds returned by that method.
proof of concept of the error-cancelling reaction generation module

The idea is to provide a molecule, and this module will generate the
products and reactants that go with the given molecule according
to the error-cancellation scheme of the Connectivity-Based Hierarchy method.

Implemented the first rung (cbh-0) as a class CBH0Reaction that
extends an (abstract) CBH_X_Reaction superclass with common
attributes and methods for the remainder of the rungs (cbh-1 till cbh-3).

Added a test module
change name of CBH_X_Reaction class to Abstract_CBH_Reaction
create makeSpeciesFromMolecule and makeSpeciesFromSMILES

instead of the single method makeSpecies(smi)
extract method map_species_list and push it to superclass Abstract_CBH_Reaction

converts a Species list with possible duplicates into a map with
unique Species and no. of occurrences as values.
create CBH1Reaction populate_products() method

Iterate over non-hydrogen connected bonds and creates
Species from these isolated bonds
add extra parameter to map_species_list

this allows using the method for both reactants AND products of
the error_reaction.
fill in the populate_reactants method of cbh-1.
add tests for cbh-1 reactions
extract method that retains heavy atoms
iterate over bonds via atom1.edges rather than using conditional

is more efficient and more human-readable too.
add exclude_terminal_moieties method in cbh-1 method

this method removes wrongly added reactants for terminal atoms in
the initial reactant
rename exclude_terminal_moieties() to exclude_terminal_atoms
accounted for branching atoms

added test for cyclohexanone which features a case of this.
rename atoms variable, it was getting too long.
add optional 'label' attribute in makeSpeciesFromMolecule method

that way, the label of the Species object is set with the SMILES
string it was created from.
use reaction string parser for tests in cbh_scheme_generatorTest.py
create abstract unit test for CBH Tests

unifies a number of common methods