Add mapper infrastructure for joins [SERINA-10]

This should allow for dynamic mapping and object graph construction
without having to manufacture it all manually, the long way.
Start migrating stuff to a Query class [SERINA-10]

This allows a relation object graph to be built, to see which objects
(once hydrated) belong to which other object. Previously attempted this
directly with the mappers, but since mappers are a distributed system,
there was no convenient way to manufacture this object graph. A way to
arbitrarily get the right references etc was needed without getting
messy. Thus, class Query

This should be able to arbitrarily reach out to various mapper classes
based on the select() definition by concatting the model name with
Mapper.
Use select() to spawn a part of the overall QueryString [SERINA-10]

This Query class will allow us to build a querystring to execute (as
normal) as well as remember the relations between the various models
included in the query, thus allowing us to construct a useful object
graph.
Add from(), update docblock [SERINA-10]
Add from() and querysting augmentation [SERINA-10]
Add join() [SERINA-10]

This joins the right model onto the left model
e.g. join($model1, $model2)

$model1's mapper contains the relationship with $model2

As per previous logs, Query class allows us to reach out to each model's
mapper, find relations, and manufacture metadata about the query which
should prove useful later.
Update docblock [SERINA-10]
Cleanup [SERINA-10]
Add state join [SERINA-10]
Add phone join [SERINA-10]
Add leftJoin() and innerJoin(), alias to join() [SERINA-10]