Refactor everything!

Didn't like to break encapsulation in the domain objects by being able to access every property through magic methods even though they were private. Besides that, I didn't like too much to turn object properties into an array. Now concrete domain objects will be more verbose, but much explicit though.

There was a bit of a mess mapping from object properties and table fields and vice versa. The DomainMapper was receiving an array of raw data from the database and translating it into object property names before calling the proper factory. There's no need to do that mapping, as factories should receive data coming from the database.