Calling M2M related fields return a collection

All multi-values related fields (M2M) are now based on a new mixin,
MultiValuesRelatedField, that add a __call__ method creating a
collection to use the field the same way we can use the RelatedCollection
on the other side, to add consistency in use.

Example:

class Person(RelatedModel):
    name = PKField()

class Group(RelatedModel):
    name = PKField()
    members = M2MSetField(Person, related_name='membership')

person1 = Person(name='person1')
person2 = Person(name='person2')
group1 = Group(name='group1')
group2 = Group(name='group2')

group1.members.sadd(person1, person2)
group2.members.sadd(person1, person2)

# A RelatedColleciton that return a collection with set(['person1', 'person2'])
person1.membership()
# A M2MSetField call, that return a collection with set(['group1', 'group2'])
group1.members()
Collection manager in M2M fields can be changed
Merge branch 'enhance-collections' into collection-on-multi-values-related-fields
Merge branch 'enhance-collections' into collection-on-multi-values-related-fields
Doc about M2M fields being callable
Add a "coerce_zadd_args" staticmethod to SortedSetField

As the way to work with arguments to the zadd method is not so easy, and
as we could have to do it many times (actually in contrib.related), the
code was deported in a staticmethod of the SortedSetField,
"coerce_zadd_args"
Allow subclassing of RelatedCollection
Merge branch 'enhance-collections' into enhance-related
"from_python" in related now attends *values, not values
Merge branch 'enhance-collections' into enhance-related
Add a way to get the instance from a FK field

The api (not sure about it) is:

an_object.a_fk_field.instance()

Notice the difference with M2M fields:

an_object.a_m2m_field().instances()

(the first () in m2m fields is because with this we return a collection)
Merge branch 'enhance-collections' into enhance-related

Conflicts:
	limpyd/contrib/related.py

Due to the new way lists of available commands are now managed in the main
metaclass in the "enhance-collections" branch, and the new order of parent
classes in contrib/related, we have to do some work to let this merge
work correctly, because as we now allow to not defined the available*
lists, they are automatically created, but then can be empty if a class
inherits from a mixin based on the MetaRedisProxy metaclass (and the use
of this metaclass, at least as a base, is mandatory, because the fields
class use it, and python enforce the use of the same base metaclass in all
inherited classes).

Now, mixins used in contrib/related are not based on RedisProxyCommand
anymore, but simply on `object`, and the MetaRedisProxy is now able to
do nothing about availbale* lists for this kind of class.
Add doc about the `instance` method of foreign keys
Calling "collection" on a M2M is the same as really call it

Before this commit, the way to retrieve related objects of a M2M fields was

>>> obj.field(**filters)

Now it's possible to use the `collection` method on all M2M fields.

So the above line is the same as

>>> obj.field.collection(**filters)

There is now more consistency between the standard API and the one provided
by contrib/related
"from_python" in related car accept FK, not only PK or model

The "from_python" method in related tranform the value to save in a related
field as a PK, if it's come from a model:

    a_group.owner.hset(an_account)

In addition to:

    a_group.owner.hset(an_account.get_pk())

Now it's also possible to pass a FKField, if the model we want to pass is
already set as the FK of another model

    a_group.owner.hset(an_account)
    # later...
    another_group.owner.hset(a_group.owner)

In additon of having to do

    a_group.owner.hset(an_account)
    # later...
    owner = a_group.owner.instance()
    another_group.owner.hset(owner)
The from_python of related fields accepts a single value

To be "consistent with the future", the from_python method used by all
the related fields to convert a field/instance to its real value now
accepts a single value, and only one. To use it with many values, simply
use the from_python_many method, or call:

    values = map(self.from_python, values)
Merge branch 'enhance-collections' into enhance-related
Merge branch 'master' into enhance-related
Merge pull request #61 from twidi/enhance-related

Enhance contrib.related