this code is never used, remove it
remove more dead code

We control the inputs to `construct`, so the wrong type shouldn't be
passed in ever.
extract the string handling part to a method.

We know the structure passed in to the `construct` method will be a
hash, so we don't need to test it all the time.  The key value will be a
symbol or string, so handle it with the special method
Call `rails plugin new yaffle` in the plugins guide. [ci skip]

It's confusing to not explicitly do this step.
Merge pull request #12463 from ulyssecarion/master

Call `rails plugin new yaffle` in the plugins guide. [ci skip]
typecast records returned from the db rather than to_sing everything
@associations can never have an array, so remove the dead code
decouple JoinAssociation from JoinDependency
hide join_parts internals from other classes
adding load_path to include active_model in the load path of example
similar to activerecord/examples/simple.rb
build association tree thing on demand.

`instantiate` is only called once, so there is no reason to cache the
data structure on the instance and mutate itself.
don't access the reflections hash

The reflections hash is supposed to be private, so let's use the API.
this method is only ever called with a reflection

Stop typechecking the parameter.  We know the type.
we know the keys are scalars, so avoid some typechecking
transform the association input so we can avoid type checks later.

We should consider moving the input munging outside the class
instantiation
we can get a list of reflections from the join parts, so let's remove
the @reflections ivar.
keys are always symbols
associations is always a hash
use the API rather than accessing underlying data structures
cache join associations and join base on the stack

No reason to decompose the join objects on every iteration