Rewrite translation() using DjangoTranslation methods

Began with these tickets:
https://code.djangoproject.com/ticket/18192
https://code.djangoproject.com/ticket/21055

After opening [this pull](https://github.com/django/django/pull/1562),  realized the code is cryptic and is quite difficult to debug.

Tore apart `trans_real.translation` and rewrote as `DjangoTranslation` methods.

Some of this code hasn't been touched in ages.  Hoping this pull lowers the barrier of entry to core django translation dev.