Merging cache

Referencing #45
@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 !
I think you should use `Hash#fetch` here with a block so that in the case that the query returns nil, the query doesn't run every subsequent method call to the association.