Handle offsets on *_many associations when eager graphing when there are no associated results
Add limit strategies for eager_graph

This expands on the idea of limit strategies for eager and applies
it to eager_graph.  Both the distinct_on and window_function
limit strategies are supported.  Unlike in the eager case, the
eager_graph case does not use a limit strategy by default, as it
is possible (and I expected likely in the general case) to perform
significantly worse.

As eager_graph already takes an arbitrary number of arguments any
of which can be hashes, it can't support an options hash, so add
a eager_graph_with_options method that just takes the associations
as a single argument and supports an option hash.

Remove the protected new_eager_graph method added recently, and
use eager_graph_with_options instead.  Among other things, this
allows you to do a regular eager_graph while overriding the join
type.

Start passing the :join_type method to the :eager_grapher proc,
instead of having it look in the dataset's :eager_graph metadata.

Since non-ruby eager_graph limit strategies are now supported,
make the eager_graph code keep of which associations need to be
manually sliced, and modify the EagerGraphLoader to use that
metadata.

Refactor some of the association reflection code to DRY it up.