Hide review and voting buttons if user is not able to do so

Moved some business logic regarding reviews from the views to the model.
Refactor review forms, views, model

* Moved validation logic to model clean methods
* Use one ProductReviewForm instead of two
* Cleaned up the ReviewDetail view
Move review tests
Dedicated view for Voting on reviews
Turn a few methods on AbstractProductReview into properties
Make vote help text more meaningful

Previously, a horribly rated review would with 100 downvotes and 5
upvotes would show a helptext of "5 customers found this review useful"
Corrected now to show both the number of upvotes and total votes, e.g.
"5 out of 105 customers found this review useful"
Handle Django 1.4's use of kwargs in class-based views
Split cleaning behaviour into form

Methods like clean_title don't get called dynamically.  Have moved
cleaning logic to the form which seems a more natural place.

Introduce some new test folders.
Rename get_reviewer_name property
Rework review/vote validation

Use field validators and model clean methods instead of forms.

Include new methods for voting up and down.

Add more tests.
Switch style of form to assign fields to instance param
Drop create_migration.py helper

The helper set up the environment for tests and then created the
migration. This can lead to subtle bugs if the test environment is
overriding models etc.

The helper is dropped to make creating migrations more explicit.
Remove custom user app from sandbox

This is to keep the sandbox as vanilla as possible, as it's the
environment that migrations should be built against.
Docs: Document how to create migrations
# Last 5 commit messages
# ----------------------
# 30eead5 Remove custom user app from sandbox [Maik Hoepfel]
# ee3ee02 Drop create_migration.py helper [Maik Hoepfel]
# a77e78c Don't show country field if only one is available [David Winterbottom]
# b5790aa Handle products without a category in GA subission [David Winterbottom]
# 39e0932 Merge pull request #782 from tangentlabs/feature/add_eway_extension_to_docs [David Winterbottom]
Avoid duplicate log messages when importing
# Last 5 commit messages
# ----------------------
# a52aaec Docs: Document how to create migrations # Last 5 commit messages # ---------------------- # 30eead5 Remove custom user app from sandbox [Maik Hoepfel] # ee3ee02 Drop create_migration.py helper [Maik Hoepfel] # a77e78c Don't show country field if only one is available [David Winterbottom] # b5790aa Handle products without a category in GA subission [David Winterbottom] # 39e0932 Merge pull request #782 from tangentlabs/feature/add_eway_extension_to_docs [David Winterbottom] [Maik Hoepfel]
# 30eead5 Remove custom user app from sandbox [Maik Hoepfel]
# ee3ee02 Drop create_migration.py helper [Maik Hoepfel]
# a77e78c Don't show country field if only one is available [David Winterbottom]
# b5790aa Handle products without a category in GA subission [David Winterbottom]
Correct a few template references

- basket_content.html: add form.instance to {{ product.get_title }}
- order.html: access to shipping_address without `order`
- order.html: bad ref: 'order.shipping_incl_Tax' (upper Tax)

Fixes #787
Adjust handling of payment event reference

Use empty string, not None.
Fix a few demo template bugs
Show phone number, delivery notes in order dashboard
Ensure email is always cleaned before authentication test