Add basic caching
#cache_key delegates to #object by default
Have to opt in with #cache_key
Clean up interface inconistency
Update railtie
Rebase against master