Rails cache optimize

This uses the Rails caching mechanism to optimize database load on the application layer.
These optimizations were initially developed in #112 and rebased to the current staging branch.
According to the [doc](http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching):

> Behind the scenes, a method called cache_key will be invoked on the model and it returns a string like products/23-20130109142513. The cache key includes the model name, the id and finally the updated_at timestamp. Thus it will automatically generate a new fragment when the product is updated because the key changes.

It might not be helpful for logged-in users that update for this reason, i'm not 100% sure and haven't tested specific edge cases. It might be more useful for a large volume of anonymous users with matching progress histories.