store join parts in a tree
generate the association hash from the top down

This prevents us from walking back up the parent tree once for each
leaf.
do not convert the tree to a list just for the first node
walk the tree rather than generating a hash and walking it
rename the variable to make more sense with a tree
reduce number of comparisons and array allocations

Just inspecting the children nodes will reduce the number of comparisons
we have to do (since it is limited to the child size)
parent is guaranteed to be the same

since we are searching a tree, the current level should be consistent,
so we don't have to inspect the parent class / table
we do not need to to_s the name all the time
we will always detect the same node, so just pass the node in
eliminate function that is only used in one place
names are guaranteed to be symbols
Define the association extensions without need to have a builder
instance
FakeController is not required in AV
Moved viewpathstest into actionview/test/actionpack/controller


These test were not running at all,
Now it will run as a tests part.
Merge pull request #12485 from arunagw/code-removal

viewpathtests file moved
convert JoinBase to a tree and remove the Node class
push parent up to the superclass

We always want a linked list back to the root node.
Modifies the initialization guide to make the initializers process clearer and remove a TODO. [ci skip]
remove == so we can see where walking up parents occurs
make node search more efficient

Rather than search every node in the tree, comparing that node and all
of its parents every time, start at the root from both sides and work
our way down the tree