Implement resource collections

This change implements support for resource collections that mimic Django's
query set API so that things like this are possible:

    >>> s3 = boto3.resource('s3')
    >>> for bucket in s3.buckets.all():
    ...     for obj in bucket.objects.limit(100):
    ...         print(bucket.name, obj.key)

Implements the following for collections:

* Non-iterable collection manager (e.g. `s3.buckets`)
* Iterable `ResourceCollection` base class (e.g. `s3.buckets.all()`)
* Chainable resource collection API (via clones)
* Filtering via `.filter(Arg1=1, Arg2=2)`
* Control item count via `.filter(limit=20)` or `.limit(20)`
* Control page size via `.filter(page_size=100)` or `.page_size(100)`
* Indexing and slicing (e.g. `s3.buckets.all()[2:5]`)
* Exposing `all`, `filter`, `limit`, and `page_size` on the manager
* Updated documentation

Also adds tests for all the relevant features. Note that batch actions
are *not* included in this change.

cc @jamesls, @kyleknap, @garnaat 
Sorry that was an old comment that should have been removed. We **do** want to pass the limit through to the paginator, because it may be possible to get the underlying service call to return only up to that many items. I'll remove the comment.