modernize: Added "division" __future__ import

Added "from __future__ import division" in every python unit of the
project. Wherever there was division going on, ensured that it was still
correct and modern.

Signed-off-by: Virgil Dupras <hsoft@hardcoded.net>
modernize: Minimum Python version is now 2.6

That allowed us to remove some dead weight in cola.compat.

Signed-off-by: Virgil Dupras <hsoft@hardcoded.net>
modernize: Added "absolute_import" __future__ import

No further adjustments were required, the code was already clear of
ambiguous imports.

Signed-off-by: Virgil Dupras <hsoft@hardcoded.net>
modernize: Removed utils.ProgressIndicator

ProgressIndicator, which isn't used anywhere, is the only place where we
use a print statement. Rather than modernizing it with a
"print_function" __future__, I've simply removed it.

Signed-off-by: Virgil Dupras <hsoft@hardcoded.net>
modernize: Added "unicode_literals" __future__ import

Also, replaced the few "u" literals spread across the code with normal
string literals.

Signed-off-by: Virgil Dupras <hsoft@hardcoded.net>
modernize: Added support for Python 3

Cola now runs on both Python 2.6+ and 3! Many refactorings were
necessary for this.

In-house "six-like" compat unit: Because there were only a few
compatibility tricks needed, I felt that it was overkill to add a
dependency on the "six" module, so I added the necessary compatibility
tricks in cola.compat:

* ustr: replaces all previous instances of `unicode`.
* unichr: Alias of `chr` under py3.
* StringIO: Import from `cStringIO` under py2 and `io` under py3.
* urllib: Aliases to `urllib.parse` under py3.

Then, there's a couple of small fixes that had to be made:

* StandardError --> Exception
* except foo, e --> except foo as e
* foo.reverse() --> reversed(foo)
* xrange() --> range() (minimal perf impact under py2)
* iteritems() --> items() (minimal perf impact under py2)
* Wrapping list() where needed (filter(), map(), etc.)
* __next__ = next aliasing

Also, there were a couple of places where `core.encode()` was used and
didn't have to. Under py2, it did nothing, but under py3, it generated
an error. I've tried to be as careful and minimal as possible for that
part, but if there's one area where there's a risk of newly indtroduced
bugs, it's that part.

There were also "cmp" functions that had to be replaced with "key"
functions.

Signed-off-by: Virgil Dupras <hsoft@hardcoded.net>
modernize: Use io.StringIO instead of cStringIO

It turns out that Python has its `io` modules since Python 2.6,
something I didn't know. It simplifies the two previous `cStringIO` uses
and removes the need for a `compat.StringIO`.

Signed-off-by: Virgil Dupras <hsoft@hardcoded.net>
Merge pull request #233 from hsoft/modernize

Support Python 3

Signed-off-by: David Aguilar <davvid@gmail.com>