Fixed #21987 -- Add support for custom MEDIA_TYPES to Media objects.

Moved the MEDIA_TYPES list into the Media class and updated the methods
to support subclasses that add to the list. Because some of the methods
rely on knowing that media is stored in _media_name attributes on the
Media object, MEDIA_TYPES had to be updated to store both the type's
name and the constructor for its container.

I'm not super-happy about storing the constructor in `MEDIA_TYPES`, but I couldn't think of a better way to handle things that also supported `__add__` and `__getitem__` and didn't make any major API changes.

https://code.djangoproject.com/ticket/21987