Work in progress fix for #538

More details in #538. This is just extracted from a monkey patch I've used briefly in an application as discussed there.

This obviously needs testing but I'm unsure best / most appropriate way to go about it. It requires a lot more "stuff" than currently exists in the test suite (I think...?).

I also thought it should go into its own name space or something for other optimizations? I'm guessing something similar could be written for other AR relations and potentially Mongoid as well.

Any thoughts / advice appreciated!