Refactor get_classes for readability

Investigation following a mailing list thread
(https://groups.google.com/d/msgid/django-oscar/a1489359-cfa6-44dc-90d8-2958be9e88a1%40googlegroups.com)
highlighted that an overriding app can't be a root app, e.g. overriding
'oscar.dashboard' with an app called 'dashboard' did not work.

In the past, there's been a lot of subtle issues surrounding the
get_classes code. Hence, some effort was expended to make the logic more
readable and fix the issue. Docstrings have been expanded, comments have
been written and private methods have been renamed.
Add blocks to product update page for better customizability
Merge pull request #1189 from mbertheau/dashboard-product-template-blocks

Add blocks to product update page for better customizability
Docs: Remove outdated how-to on multi-dealer setup

This functionality is part of core Oscar now; the permission-based
dashboard should be used instead.
Add Django JS view to demo urls.py
Drop legacy image importer for demo site

No reason to keep that, we can just use Oscar's version. Packaged the
images in an archive to achieve that.
Explicit debug toolbar setup for demo site

Got bitten by a circular import when trying to do 'make demo'; this
fixes it.
Add circular import warning to get_classes

Before the fix in e97ec27c958e56055e7383a3ed6a38a49a244512, the new
get_classes threw an AppNotFoundError whereas get_classes prior to the
refactor did not.

The condition is that neither the local module nor the Oscar module
could be imported. Our reasoning is that this is an issue with circular
imports. Before the refactor of get_classes, not being able to import
the Oscar in the shortcut path (beginning of function) would raise an
ImportError; which is then masked by a wrapping get_classes call. Hence,
the circular import is hidden.

This fix highlights the condition explicitly by raising an error that is
intentionally not an ImportError.
Rename poorly named partner.exceptions.ImportError

Naming it like a built-in exception makes it hard to distinguish between
the two and is error prone.
Move all loading exceptions into new exceptions module

This follows a pattern demonstrated by other Oscar apps.
Filter out non-Product search results

Fixes #370.
Pin django-oscar-paypal to v0.8 for demo site
Correct default price range facet
Correct import in loading module
Allow search facets to have options passed

I was testing this with adding a rating facet to the sandbox.  This
works ok but lots of products don't have a rating and so don't appear.
The syntax for getting Solr to select docs without a facet is geniunely
annoying and hard to get Haystack to do it.  I gave up.