Add implicit reverse references.

This pull request adds support for resources to reference their parents,
for example:

```python
obj = s3.Object('boto3', 'sun.jpg')
print(obj.bucket.name)
```

This works by using the `subResources` feature of the resource JSON
description format. Since `Object` is listed as a child of `Bucket`
in the bucket's sub-resources, and we know the identifier mapping
from and object's `bucket_name` to a bucket's `name`, we can create
the reverse reference just like if an explicit `hasOne` was defined
in the JSON.

Additionally this fixes the SQS resource JSON to no longer explicitly
list the Message hasOne Queue relation, since the Queue has a Message
in its sub-resources.

Adds a test for the resource model as well as modifies the references
test to ensure both normal and reverse references become attributes
on the instantiated resource.

**Note**: this is not very efficient, but caching should fix that in the near
future. I'm open to suggestions to make it better.

cc: @jamesls, @kyleknap 
Let's not mask potential bugs.  It seems completely reasonable that hasattr should work, so if we are going to change it we should understand why.  I'm not really comfortable saying that we have no idea why it works let's just leave it as is, especially given this seems pretty straightforward to track down why.