Monkey patch 'django.utils.translation'

Modify Django's translation library, such that the gettext family of
functions return an empty string when attempting to translate a
falsey value. This overrides the default behavior [0]:
> It is convention with GNU gettext to include meta-data as the
> translation for the empty string.

This patch provides a holistic solution to replace the current piecemeal
approach [1][2].

Affected Methods:
    - gettext
    - gettext_lazy
    - pgettext
    - pgettext_lazy
    - ugettext
    - ugettext_lazy

[0] https://docs.python.org/2.7/library/gettext.html#the-gnutranslations-class
[1] bad803e451ce63b4693ecf52b66cedfce5b43160
[2] https://github.com/edx/edx-platform/pull/4653
That's the thing; the module actually _should_ be patched when we're
outside of a test.

As you had pointed out [0],
> Yes, the test suite runs via `manage.py`, which runs the startup code.

Since we're patching the module in `lms/startup.py` and
`cms/startup.py`, the module is already patched when we first start
running tests. This is why setup must keep a record of whether or not
the library was patched and then cleanup must repatch _iff_ the module
was patched to begin with. I'm not repatching unconditionally, as the
behavior/configuration could change.

This can be verified by adding the following as the first line of the
`setUp` method, which will fail given the current configuration:
```python
self.assertFalse(is_patched())
```

[0] https://github.com/edx/edx-platform/pull/4686#discussion_r15815032