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 
We don't have to change this now, but let's not mock any value types moving forward.  I think it will make the tests easier to maintain.  And if creating shapes is not as easy as it could be we can add factories/builders to make this easier.