Adding virtual attribute support

In some cases, it could be useful to have attributes that are not persisted to the DB. For instance, user models could have a virtual `password` property that is bcrypt'ed in a beforeSave handler, and stored in a column called `encrypted_password`.

We are using virtual attribute support together with onHydrate callbacks to normalize our data model as we migrate data to different tables, which allows us to keep model property access consistent, even across data migrations.

These changes allow you to define virtual properties in your schema, which makes sense if you think of the schema as the DomainObject schema, and not the mysql schema. So the property definitions become:

```php
public funciton properties(){
  'products_id' => new Types\Integer(11, 'primary auto_increment'),
  'products_volume_price' => new Types\Decimal(15, 2),
  # This property is set onHydrate by getting the latest `rate` from the products_rate table
  'rate' => new Types\Decimal(15, 2, 'virtual'),
}
```

If you are interested in this pull, I'll add tests.