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
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
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
Clean password reset forms
Use Profile.DoesNotExists

It makes code a little bit more readable
Fixed a bug when trying to edit variant products.
Use SimpleLazyObject for request.basket

This is a major performance improvement for pages where the basket is 
not used (other pages or loading basket async via javascript).

Note that request.basket is now not available when calling 
`apply_offers_to_basket`. Note sure why this is required since the 
basket is passed along.
Fix unittests by checking if request.basket is a SimpleLazyObject
Small stylefix in BasketMiddleware.process_response

We already checked if request has the 'basket' attribute, no need to check it twice