Improve the API layer for the Media class

Make the following code work correctly:

    Media(operatingsystem=[1, 2, 3]).create()

Formerly, operating system IDs would be completely ignored.

Make `Media.read` capable of correctly unpacking operating system IDs.

Make `EntityReadMixin.read` capable of correctly dealing with
`SomeEntity.Meta.api_names`. In other words, make `EntityReadMixin.read` capable
of dealing with mappings between local attribute names and remote attribute
names.

Test these changes.
What if yet another subclass overrides `read` and itself calls `self.read_json` before passing in `attrs`? In that case, we still want to correctly unpack the given operating system IDs.