Memoize shop_session in LoginProtection

#### Problem: 
`ShopifySessionRepository.retrieve` can be pretty expensive if it requires fetching items from the database. 

#### Solution:
Memoize the results of `shop_session` instance method.

@csaunders @awd please review.
cc: @nickhoffman @mtaher 
just add asset for the `shop_session` calls like `assert @controller.shop_session` just to make sure we have things being returned and not nil, then 

![unnamed-1](https://cloud.githubusercontent.com/assets/408219/5037968/84426524-6b59-11e4-8292-7e8c70abe1e9.png)