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 
Perhaps we should re-evaluate the usefulness of these two methods. In my opinion, the only reason to have such methods is:

1. Improve readability of code (speed to understanding)
2. Require less typing (programmer convenience)

Given that, I'm not sure anymore if they make sense:

```python
for obj in bucket.objects.limit(50):
    print(obj.key)

for obj in bucket.objects.with_limit(50):
    print(obj.key)

for obj in bucket.objects.all(limit=50):
    print(obj.key)
```

Thoughts?