Media widget split

Merge (breaking API) changes around making the Media widget depend on the device abstraction rather than having the device abstraction depend on the widget (resulting in a circular dependency between the device and widget sections of the code base).