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 
I was returning `@session` from the `setup` method. But I just realized that we are just return the regular session since it is not nil in this case. Updated in 25b5c6a