Merging cache

@DanOlson Here I cherry-picked 2 of your commits and made a small change. We were discussing with @eloyesp and @olvap about the persistence module of your other commit and decided that it should be made via composition and not mixing in. Can you please make another PR with the reload functionality but implemented on SObject? we can think about refactoring later. Thanks !