fromOldAdjacencyList: reduce nesting of if statements

Two nested "if"s became an "if and"
fromOldAdjacencyList: reduce code duplication

There was a whole block for if atom.isHydrogen() and another for 
if it's not, but they only differed by the value of two constants
(the maximum number of lone pairs and the charge)
Tweak some comments, docstrings, and debug logging.
fromAdjacencyList: make last-line sniffing safer

Better to remove blank lines from the end before checking
the adjacency list style from the last line.
fromOldAdjacencyList: stricter syntax checking of multiplicity line

It now must be a list of integers, like 'multiplicity [0,1,2]',
or an integer like 'multiplicity 3'. The assertion tells you.
to/fromAdjacencyList: SYNTAX CHANGE: wildcard 'x' now includes 0.

I think it was probably meant to, but we should double check.
It looks to me like this wild card is not (yet) used anywhere
in the database anyway.

I also made it so we use the wildcard when writing adjacency lists
too, if either the unpaired electrons or pairs have [0,1,2,3,4]
they are written as 'x'.
Tidy indentation in fromAdjacancyList

Eclipse was complaining about the indentation.
toAdjacencyList: rename internal variable to atomUnpairedElectrons

This was called atomElectronStates, presumably because it used to
represent the multiplicity too (eg. 2T, 2S, etc.) but now it is
just the unpaired electrons, it makes more sense to call it that.
Molecule __init__ and __repr__ respect multiplicity.

When creating a molecule via the SMILES shortcut, you can now
specify the multiplicity, and furthermore the __repr__ will 
get back what you started with:

In [1]: from rmgpy.molecule import Molecule

In [2]: print Molecule(SMILES="[CH2]").toAdjacencyList()
multiplicity 3
1 C U2 L0 E0  {2,S} {3,S}
2 H U0 L0 E0  {1,S}
3 H U0 L0 E0  {1,S}


In [3]: print Molecule(SMILES="[CH2]", multiplicity=1).toAdjacencyList()
multiplicity 1
1 C U2 L0 E0  {2,S} {3,S}
2 H U0 L0 E0  {1,S}
3 H U0 L0 E0  {1,S}


In [4]: Molecule().fromAdjacencyList(""" 1 C 2  """)
Out[4]: Molecule(SMILES="[CH2]")

In [5]: Molecule().fromAdjacencyList(""" 1 C 2S  """)
Out[5]: Molecule(SMILES="[CH2]", multiplicity=1)
fromOldAdjacencyList: condense radical list [2,2] into 2

Previously, a '2' represented '{2S,2T}' which would in
turn be parsed as [2,2] for the allowed number of electrons.
We now store sorted(set(radicalElectrons)) so that
'{2S,2T,1,3Q}' will become [1,2,3] instead of [2,2,1,3]

Also changed the line wrap to make easier to read.
toAdjacencyList: multiplicity list printed without spaces.

'multiplicity [1, 2, 3]' is now 'multiplicity [1,2,3]'
fromOldAdjacencyList: rename variable to lonePairsOfElectrons

This counts pairs, not electrons, so I find this name clearer than
lonePairElectrons
fromOldAdjacencyList: blank lone pairs on group interpreted as undefined (wildcard).

Previously, these were all ending up as -1. Now they are set to None, 
which is what the new fromAdjacencyList does.
Small tweak in Atom.isSpecificCaseOf; use list iterator instead of index, range, len, lookup etc.
TODO: lone pairs and charges are not compared when comparing Atoms or GroupAtoms

isSpceficiCaseOf etc is ignoring lone pairs and charges. Made a few notes as to where this should be fixed
Adjacency list I/O for groups better for Lone Pairs
Merge pull request #232 from rwest/adjlist

Adjacency list I/O edits