Condense code for adding a wildcard set of unpairedElectrons, lonePairs, or charges.
Raise an error if there is a duplicate group in a kinetics family.
make orbitals global in adjlist and correct some of them.

The maximum number of valence orbitals is defined per period of the
periodic table. Each orbital can contain a maximum of 2 electrons.
We assume that period 2 and 3 have a maximum of 8 valence electrons so
this leads to a maximum of 4 valence orbitals.
use number of valence electrons rather than orbitals in H count (adjlist)

this makes the "formula" that determines the number of hydrogens to be
added much more transparent.

Also, account for atom partial charge when determining this.
create class PeriodicSystem and create class attributes

this makes it more reusable, I think.
test checking whether charge is fully checked during molecule isomorphism

parametrized test via nose-parametrized.
tries all possible combinations (repetitions allowed) of charges for
carbon.
added a permutation through some elements in isomorphismTest.py

elements: C, O, N, S
account for number of lone pairs in isomorphismTest

I forgot to modify the number of lone pairs according to the element.
refactored the hydrogen saturator method in adjlist in its own class

created a class method, rather than an instance method because it
doesn't use any important attributes.
corrected typo in isomorphismTest.py
refactored the consistency checks in adjlist in ConsistencyChecker class

currently 2 checks exists:
1) valency of atom
2) multiplicity must be odd

if not correct, an appropriate error is raised.
correct typo in adjlist.py: check_multiplicity

if multiplicity is even, then we have a problem.
charge is calculated, NOT considering maximum valence of period

the charge of atom can be calculated by considering its
- theoretical valency (eg. carbon = 4, oxygen = 6)
- the number of unpaired electrons
- the number of lone electron pairs
- the bond order (connectivity with other atoms)

the maximum valency of 2 or 8 does not come into this equation.
correct check of multiplicity for doublets

also, added some more info on what we exactly check
log to info when checking consistency of multiplicity for nRad > 2
correct multiplicity check for molecules without unpaired electrons

Also, made it more clear how we perform the checks
added subgraph isomorphism test for charges in isomorphismTest.py
add lonepair and charge check in .equivalent and isSpecificCaseOf in Atom
correct bug in adjlist multiplicity checking

also, add some more info in Exception
update adjacency list for 2 mols in moleculeTest.py