reuse available collection? check instead of macro

Reflection has an available method that is used to check if the reflection is a `collection?`. Any :has_many macro is considered a collection and `collection?` should be reused instead of `macro == :has_many`.

Rebased with master to fix conflicts with #15596 :smile_cat: