Remove null=True on CharFields and others

Reviewed CharFields, EmailFields, TextFields, etc.

Some fields were left unaltered:
* proxy_class rely on unique=True, and that only works sensibly with
  null=True
* The same is true for Product's UPC
* Because order's Line model UPC field usually gets fed the Product's
  UPC, it's least intrusive to still allow null=True there
Subtle changes to handle '' instead of None

Tests failed on a few occasions, because CharFields were set to None or
expected to be None.
Add start and end times to vouchers
Make test_datetime timezone aware
Merge branch 'master' into issue/1068/voucher_improvements

Conflicts:
	oscar/apps/voucher/abstract_models.py
Add shipping offers as voucher options
Strip whitespace from start/end of search term

Remove whitespace from beginning and end of search term (UPC and Title)
in dashboard
Allow test cases to consider a custom Oscar user model

Most test cases only consider the default Django user model that
contains the username field. As soon as you extend Oscar's AbstractUser
model that doesn't contain a username field, tests that use
ClientTestCase or WebTestCase fail.
Remove several code paths exclusive to Django 1.4
Introduce loud get_model loader

Django's get_model returns None if the import fails, which causes subtle
bugs further down the line. This change introduces a wrapper around it
which raises an ImportError instead, hence catching the error as early
as possible.
Switch to Oscar's get_model function

This should always be used instead of Django's silent version.
Fix ImportError highlighted by switch to loud get_model loader

forms.py was using the wrong import statement to load the User model.
[Backport] Mark more strings translatable

Fixes #1171

(cherry picked from commit 0a72bf27c93322a10afbda602e87935438272552)
[Backport] Correct handling of offer creation without a range

The workaround for JSON serialisation introduced a bug that was
triggered when the offer contained no range, which is allowed for
certain offer types. In that case range is None, and accessing range.id
threw an error.

Fixes #1167. Thanks to @izidormatusov for reporting.

(cherry picked from commit 1e85821d85068c71d7d5b959fce743f1b7bfe248)
Fix issue with custom user model in order migration
 Make product classes manageable within the dashboard closes #1094
Disallow deletion of product classes with products. ‘Class’ changed to ‘Type’ in UI.
Fix whitespace and line length
Fixed change_order_status in dashboard's OrderDetailView.
Old status was not shown after changing. Status needs to be saved before
order will be passed to handler.
Extend docstring for AbstractProduct.status

Done because a question on the mailing list arised about the use of it.