Add request.basket_hash for custom caching hooks

To add caching to the basket contents we need a basket hash but we don't
want to load and process all offers. Separate the retrieval of the
basket and make the hash accessible via request.basket_hash