Make Repository.read work correctly

Add `EntityReadMixin` to the `Repository` class. Override the `read` method,
allowing it to deal with the fact that issuing an HTTP GET to the API returns a
"product" hash containing an ID, but not a "product_id" integer as expected.

Test this change.

Update `EntityReadMixin` to deal with the fact that `OneToOneField`s and
`OneToManyField`s may contain either classes or strings naming classes.
Here's the relevant code snippet from super:

```python
def read(self, auth=None, entity=None, attrs=None):
    if entity is None:
        entity = type(self)()
    if attrs is None:
        attrs = self.read_json(auth=auth)
    ...
```