begin refactoring add_constraints by moving join keys

add_constraints is complicated and difficult to read. This is the
beginning of a long process of refactoring this code. First step:
moved the join keys out of AssociationScope and into reflection.

We then don't need to call `reflection` because now reflection is
`self`.

`foreign_key` must be named something else because reflection already has a
`foreign_key` method and when passed into `JoinKeys` it was getting the
wrong assignment. `reflection_foreign_key` seemed to be an appropriate name.
I also named `key` `reflection_key` to match `reflection_foreign_key`.
Merge pull request #15630 from eileencodes/refactor-join-keys-on-add_constraints

begin refactoring add_constraints by moving join keys