begin refactoring add_constraints by moving join keys

add_constraints is complicated and difficult to read code. This is the beginning of a long process of refactoring. 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`.

cc/ @tenderlove
why dont we return a array here instead?
```ruby
[reflection_key, reflection_foreign_key]
```
and in the other side, do something like:
```ruby
key, fk = reflection.join_keys(assoc_klass)
```