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 
Good point. Updated in 7ea7702. I'll merge once tests have finished.