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.Object('boto3', 'sun.jpg')
<boto3.resources.factory.s3.Object at 0x1098bf080>

# After
>>> s3.Object('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 
I feel like this may lower readability. See [this gist](https://gist.github.com/danielgtaylor/748e0442e42c20d5ccdd) for the same file with proper PEP8 indents and the diff between the two. In many cases it increases the vertical space that's required for the error messages which were previously on one line (my original reason for doing this). Even PEP8 states that its rules can be avoided in the interest of readability. Thoughts? @kyleknap