decouple the `join_constraints` method from the parent pointer
pull parent and alias tacker from the nodes.

For now, we'll set the tables on the nodes manually.
remove dead code / make duplicate code more obvious
cache the primary key / typcast lookup on the stack
belongs_to can be treated the same way as has_one
reflections know if they are collections, so ask

We don't need to poke at the macro to figure out if we should look for a
cached record or not
fix variable name. we're constructing a model, not an association
we always have a reflection and it is on the node
extract conditional to the caller
we always have a model now
push up the loaded target checking
keep track of AR objects we've made as we walk the tree

Remove duplicate removal code because we avoid adding duplicates as we
walk the tree the first time
the parent hash keeps the records unique already
remove useless code

turns out that the activerecord object will always have the same id as
the row from which it was constructed
remove dead code
JoinDependency will take care of making things unique
push up `select` exclusion
calling construct_relation_for_association_find is no longer necessary
eliminate duplicate code from to_sql

I don't really like passing the block, but this seems easiest for now
eliminate single use method