Code refactoring, to make the library more Pythonic and nicer to user

Have a look at the code and let me know what do you think..
It looks way cleaner to me this way (and of course tests are up & running on 2.6, 2.7, 3.1, 3.2 and 3.3), while keeping retro-compatibility (hopefully, anyways old tests are running on new library).