DRY up visit_Arel_Nodes_SelectCore

DRY up `visit_Arel_Nodes_SelectCore` and extract nodes collection to `collect_nodes_for`, for collecting wheres, projections, groups, windows
The API intention is that `visit` is not guaranteed to return the same (collector) object that it was passed.