Fix resource loading and return default values

This change fixes the resource data loading logic to use the identifiers
for determining plurality, and implements a function to build empty
responses given a service model and search path. The following now
work correctly:

```python
>>> sqs = boto3.resource('sqs')
>>> queue = sqs.get_queue_by_name(QueueName='test')
>>> print(queue.url)
'http://...'
>>> print(queue.attributes)
{...}
```

Assuming you have zero messages in the queue, this now works as well:

```python
>>> messages = queue.receive_messages()
>>> print(isinstanc(messages, list))
True
```

This means that code using the SDK can assume that `receive_messages`
will **always** return a list. Empty response handling tests have
moved into their own class; all other related tests have been updated.

cc @jamesls, @kyleknap 
I don't think we can safely assume empty string.  In some services this has semantics that are different from "not present".  The complex shapes are ok though.