Make id default to null [SERINA-11]
Allow PropertyDefinition to take third arg [SERINA-11]

This indicates the type of field so pdo can use its ints
Throw exception upon PDO error [SERINA-11]
Apply type param for each PropertyDefinition [SERINA-11]
Add type param and prepareRawQuery [SERINA-11]

That allows us to use any query we want, rather than follow the
ORM-style paradigms
Add type param, add save() method [SERINA-11]
Add On Duplicate Key Update [SERINA-11]
Add test method for saving User object instances [SERINA-11]
Repair existing mappers with third property arg [SERINA-11]
Add getLastInsertId() [SERINA-11]

This gets the last primary key id inserted. This value is repopulated
back into the object that was created so you have immediate access to
the object with its newly derived primary key
Reuse lastInsertId value in object just saved [SERINA-11]

Every time you save an object and it gets created in the database, its
newly assigned primary key will be returned to the saved object,
allowing you to use it in subsequent operations.
Remove probe [SERINA-11]
Use null instead of false [SERINA-11]
Add findById() method [SERINA-11]

Gets a hydrated object by its primary key
Update deriveGetterMethod() [SERINA-11]

This converts underscore_case to camelCase
Save a basic user and details [SERINA-11]
Remove probes [SERINA-11]
Invert joining and relations [SERINA-11]

Instead of joining on columns, Mappers now join on properties. This
relieves the need to have columns defined (such as address) when they
will be used as hydrated Collections from other tables. In this case, a
column would always remain null, but still be in use in the Mapper and
join definitions, forcing it to exist.

Inverting the joins and relations now allows Mappers to join on
Properties, rather than Columns.
Update mappers with new type definitions [SERINA-11]
Update reference from 'key' to 'property' [SERINA-11]

This keeps in line with the concept of joining based on properties,
rather than on columns