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
 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
Use slug instead of id for product_class in URL

This gives more readable URLs.
Put all widget initialization code in one function.

That way in can be called easily for dynamically added forms.
Add widgets only to visible elements.

That way they're not added to hidden empty form templates. The form
template is cloned when using dynamic formsets. In my experience
the timepicker and select2 get mighty confused when they are cloned.
Therefore the idiom is to leave the hidden empty form without widgets and
attach them after they become visible.
Limit widget initialization to a provided scope.
Explain why login_required is not applied to views

For some (including me) it might be confusing why certain views are not
protected by login_required. Add comments explaining why it is the case.
Bug: changing protection was not login protected

Anonymous users can see the change password screen when manually
accessing URL /accounts/change-password/

When the form is submitted NotImplementedError is raised.

Solved by wrapping in login_required() decorator.
Enforce changing password follow password rules

During the registration and in dashboard, the new password is required
to have min 6 characters and not be in common passwords. Those rules are
not enforced when changing password in the account section or resetting
password.

Extract password validators into core validators as they are used by
multiple apps. `password_validators` now contains all validators applied
to passwords: DRY principle.

Changed auth tests to have a proper password for password reset.
Use Oscar partial for the form