Switch `resource.meta` to be an object.

This changes the behavior of the meta object in a **backward-incompatible**
way. It goes from being a dict to an instance of a `ResourceMeta` class.
Example:

```python
import boto3

s3 = boto3.resource('s3')

# The old way
s3.meta['service_name']
s3.meta['client']

# The new way
s3.meta.service_name
s3.meta.client
```

cc @jamesls, @kyleknap 
I think stylistically we should always be using "is not None" if we are comparing against None, which in this scenario we are.