Eager loading support

This adds support for an eager_loaded scope as an alternative to the existing join-based scope. This is useful if you want to preload read marks in a query that already uses eager loading.

All tests passing:
18 runs, 58 assertions, 0 failures, 0 errors, 0 skips