preserve reverse_related_field caches when casting to a subclass (redux)

Originally PR #78 by @screamndigit

* Rebased against master,
* fixed comments made in 838493a7bd2afdc8edd4fa8e2ba69f23e811daa2,
* cherry-picked the original commits from
    * Sonicbids/master@21d92e7d5e481f478dfd829a45309b14e57af68e
    * Sonicbids/master@7d2fa5953a9bcc39cd7994365cdf688c47391ae8
    * Sonicbids/master@f65ef5893d6f453e5ba82b4eed108fbf7b6f8761
* removed the expectedFailure to verify the fix.