Refactor get_model_ct to handle Django 1.7, add tuple version

We have a mix of model _meta access which usually expects strings but in
a few places needs raw values. This change adds support for Django 1.7
(see https://code.djangoproject.com/ticket/19689) and allows raw tuple
access to handle other needs in the codebase
Consolidate model meta references to use get_model_ct (see #981)

This use of a semi-public Django interface will break in Django 1.7
and we can start preparing by using the existing
haystack.utils.get_model_ct function instead of directly accessing
it everywhere.
Haystack admin: refactor to use get_model_ct_tuple
Refactor simple_backend to use get_model_ct_tuple
Use get_model_ct_tuple to generate template name
Tests: add MIDDLEWARE_CLASSES for Django 1.7
Unpin elasticsearch library version for testing
Tests: Whoosh test overhaul

* Move repetitive filesystem reset logic into WhooshTestCase which
  cleans up after itself
* Use mkdtemp instead of littering up the current directory with a
  'tmp' subdirectory
* Use skipIf rather than expectFailure on test_writable to disable
  it only when STORAGE=ram rather than always
Django 1.7: ensure that the app registry is ready before tests are loaded

The remaining test failures are due to some of the oddities in model
mocking, which can be solved by overhauling the way we do tests and
mocks.
Mark expected failures for Django 1.7 (see #1069)
Update tox Django version pins
Django 1.7 compatibility for model loading

This refactors the previous use of model _meta.module_name and updates
the tests so the previous change can be tested safely.

Closes #981
Closes #982
Start the process of updating for v2.3 release
Django 1.7 support for app discovery

* Refactored @Xaroth’s patch from #1015 into a separate utils
  module 
* PEP-8 cleanup
Remove Django version pin from install_requires
App Loading: don’t suppress app-registry related exceptions

This is just asking for trouble in the future. If someone comes up with
an edge case, we should add a test for it
app loading: use ImproperlyConfigured for bogus app names

This never worked but we’ll be more consistent and return
ImproperlyConfigured instead of a generic LookupError
Fix app loading call signature

Updated code from #1016 to ensure that get_models always
returns a list (previously on Django 1.7 it would return
the bare model when called with an argument of the form
`app.modelname`)

Add some basic tests
Travis: Enable IRC notifications
Allow apps without models.py on Django <1.7

This wasn't officially supported by Django prior to 1.7 but is used by
some third-party apps such as Grappelli

This commit adds a somewhat contrived test app to avoid future
regressions by ensuring that the test suite always has an application
installed which does not have models.py

See #1073