Py2&3 port

Initial port is done. Tests are passing against 2.7 and 3.3 using six for all incompatibilities.
The idea behind this is that in Py2 self.keys() returns a list of copies and in Py3 it returns a dictview and iter(dictview) does not allow modifications and raises 
RuntimeError: dictionary changed size during iteration .
Wrapping this in list forces returning a copy of the keys in both cases, so dict entries can be removed during iterating over it.
Your suggestion returns again the same RuntimeError, so i changed it to 
```python for key in list(self):```
and the tests passes again. I understand that extra copying of the dict keys is not optimal, but i haven't found a better solution to keep the semantics.