Update resource string representations

This makes printing resources much more useful by including the class
name, any resources identifiers, and the region:

```python
>>> import boto3
>>> s3 = boto3.resource('s3')

# Before
>>> s3.Bucket('boto3', 'sun.jpg')
<boto3.resources.factory.s3.Object at 0x1098bf080>

# After
>>> s3.Bucket('boto3', 'sun.jpg')
s3.Object(bucket_name='boto3', key='sun.jpg') in us-east-1
```

This gets even more interesting when mixed with collections,
e.g. `list(s3.buckets.all())` is now actually useful since you
can easily see the bucket names.

cc: @jamesls, @kyleknap