Operate on unique data for each instance

This fixes the following bug:

    >>> s3 = boto3.resource('s3')
    >>> obj1 = s3.Object('my-bucket', 'my-key')
    >>> obj2 = s3.Object('my-bucket', 'my-key')
    >>> obj1.load()
    >>> print(obj2.meta['data'])
    { ... }

The data from `obj1` was shared with `obj2` which prevented making
multiple unique instances of resources. This fixes the issue by
making each resource operate on a copy of the data, created at
instantiation time. Adds a test to ensure this works as expected.

cc @jamesls, @kyleknap