Add dynamic fields

Dynamic fields are a way to remove the limit of fields stored on a model.
Addind a dynamic field to a model allow creating of unlimited dynamic
versions of this field.

If the field as for name 'foo', it allows unlimited fields, created on the
fly with names like 'foo_bar', 'foo_baz', 'foo_qux'...

Example:

```python

from limpyd_collections.dynamic import model, fields

class MyModel(model.ModelWithDynamicFieldMixin, MyBaseModel):
    dyn_field = fields.DynamicSetField(indexable=True)

instance1 = MyModel()
instance1.dyn_field('foo').sadd('bar')
# same as:  instance.get_field('dyn_field_foo').sadd('bar')
instance1.dyn_field('foofoo').sadd('barbar')
instance2 = MyModel()
instance1.dyn_field('foo').sadd('baz')
instance3 = MyModel()
instance3.dyn_field('foo').sadd('bar')

collection = MyModel.collection().dynamic_filter('dyn_field', 'foo', 'bar')
# same as: collection = MyModel.collection(dyn_field_foo='bar')
# ['1', '3']

```
Add tests for dynamic fields
Add dynamic related fields

Dynamic related fields are dynamic fields adapted to related fields.
So they use the exact same API as dynamic fields. The only addition is
that the related collection attends the dynamic part as first argument:

```
class Tag(TestRedisModel):
    slug = limpyd_fields.PKField()

class Person(TestRedisModel):
    name = limpyd_fields.PKField()

class Movie(TestRedisModelWithDynamicField):
    name = limpyd_fields.PKField()
    tags = dyn_related.DynamicM2MSetField(Tag, related_name='movies')

somebody = Person(name='Somebody')
matrix = Movie(name='Matrix')
cool = Tag(name='cool')
matrix.tags.get_for(somebody).sadd(cool)
# same as: matrix.tags(somebody).sadd(cool)

sf_movies_for_somebody = cool.movies(somebody)
# ['Matrix']
```
Add tests for dynamic related fields
Doc for dynamic fields (minus dynamic related fields)
Doc for dynamic related fields
Merge pull request #1 from twidi/dynamic-fields

Dynamic fields