Adding __setstate__ magic resolves pickle error

By adding the __setstate__ method an infinite loop is avoided regarding
the use of __getattr__ on the ProductAttributesContainer model.

Moving tests into appropriate folder
Fix bug with date filtering of offers

Offers with no end date were not being picked up.
Allow custom benefits to be registered and used in offers

This alters the benefit model to allow proxy class to be registered.
The dashboard flow is tweaked to allow such classes to be selected once
they've been registered.

A dummy custom benefit is included in the sandbox.
Rework offer benefits to return result object

This paves the way for custom benefits to return successful applications
that don't lead to a discount.
Remove get_discounts method

Part of general refactoring.
Add support for showing a custom message on basket page
Fix header mark-up for gateway
Allow offers to use deferred benefits
Fix bug in offer manager with new datetimes
Mark offer condition/benefit summaries as safe

They can contain HTML these days.
Fix a few validation errors as part of offers dashboard
Move grouped_voucher_discounts off basket model

Moved onto the OfferApplications class, which is where it belongs
conceptually.
Add ranges fixture

Was getting pretty bored of creating one everytime I want to test the
offers dashboard.

Fixture is loaded as part of 'make sandbox|demo' targets.
Remove statics from demo site

Don't think these files should ever have been committed.
Bring settings files for sandbox and demo site in sync
Rework offer result classes

To make it easier to distinguish between the different offer application
types.
Add simple CSV fixture for testing ranges dashboard
Use HTML flash messages in ranges dashboard
Add fixture creds to README
Relabel the demo site