Add rules list [SERINA-10]

This is an accumulation of a list of rules used in joins throughout the
query.

Also add methods for deriving setters and getters based on a column and
mapper class, which tracks back through the properties to figure out
which database columns map to which properties.
Use updated joinCollections() [SERINA-10]
Store final joined collections in specified field [SERINA-10]

In rules, you can now specify a [$this][collection] field, which is
where stuff from [$other] is placed. This is used to counter the
scenario where table1 joins table2 on a key stored from table2, ie.

join on table1.id = table2.user_id

That is, table1 never knew about table2.

Prior to this, $table1 had a foreign key for items in $table2 (and the
latter didn't know about the former)