Add Python 3 compatibility, take 2

Now based on the most recent code ;) . This code should be better too, because I changed some things to the code be more robust.

We still need to figure out how to manipulate strings literal. Python 3 use unicode only, while Python 2 needs to explicit says that you're using unicode. One way to do that would be to put the following import:
```
from __future__ import unicode
```

On **every** file, and the other one would be to use:
```
u"Hi, I am a string!"
```

On every string used by the code.