Port python bindings to Python 3

Here I'm going to address remaining issues by merging changes from my diverged fork that made Protobuf 2.5.1 compatible with Python 3 by retaining compatibility with all other supported versions.

I kindly ask authorized developers to review and leave comments and I'll try to address them as soon as I can.

A few questions:
- Did you loose the requirements for minimum Python 2 version?
- Most tests are missing here: https://github.com/GreatFruitOmsk/protobuf/blob/master/python/setup.py#L100-L102. Why?


Would this benefit from using `six.reraise()` https://pythonhosted.org/six/#six.reraise ?  It would require passing in the `exc_type`, `exc_value`, and `exc_traceback`, but would allow preserving the original exception context.