move validation for required attributes to repo.persist

now it is possible to create incomplete entities
add a factory method to repo
better, more truly 'functional' entity
made repo optional for entity creation

and provided means to attach entity to repo later
introduced memoization and entity wrapper mixins
extract entity DSL into its own file
add idea of association change
add association dsl

not complete, but good start
remember association descriptions
formalize definitions of associations and responsibilities/roles
unify .apply interface for attributes and associations
move a lot of logic from apply to constructor
pull in association class into entity itself
split constructor and factory method into two pairs
extract entity change processor out of entity
introduce LazyCache and tie it in with associations
no need to declare direct link FK as an attribute
merge 2 hash arg to apply into one

Example:

apply(title: 'test', user: foo, tags: [:+, t1, t2])
make is possible to set list of entities in addition to +/-
implement support for persisting direct fk associations