Fixed #22634 -- Changed Session and SessionStore to be easily extendable

Introduced abstract base model for Session, and properties enabling the developer to override session model class used by session store and the session store class used by the model.

Allowed to override KEY_PREFIX via the cache_key_prefix property.
@berkerpeksag, it cannot be a class attribute because of circular imports (see imports at the bottom of `models.py`, `backends/db.py` and `backends/cached_db.py`.

I've discussed the issue with Russell (@freakboy3742) at DjangoCon Europe 2014 sprints, and we've agreed on the `@classmethod` solution.

Anyway, I'll make rebase onto current master, and push it promptly.