Feature/refactor relation

/to @ritch 
There are three classes now:

1. RelationMixin is the placeholder to all methods to be injected to model classes. 
2. RelationDefinition is the meta class for relation definition
3. Relation is the instance applying a relation definition to a model instance