Switch callers of Model.apply_association_dataset_opts and .eager_loading_dataset

This adds support for two new options in the eager_loading code,
:initialize_rows=>false to not initialize the rows, and :dataset
to override the dataset to use.

This also adds AssociationReflection#apply_eager_dataset_changes,
to handle some cases where apply_dataset_changes is used but
eager_block should be considered as well.

Using these new features, rcte_tree and dataset_associations can
now be switched.
Model.eager_loading_dataset and Model.apply_association_dataset_opts are now deprecated
Model.def_{add_method,association_dataset_methods,remove_methods} are now deprecated

This DRYs up the model association code such that Model#associate
adds the instance methods instead of def_#{association_type}.
Old code that uses the deprecated methods will still work, but
the methods will be removed after 4.10 is released.

Note that unless you are adding your own custom association
types, this change shouldn't affect you.