Custom exceptions for MediaMetadataRetriever.setDataSource()

* Add ability to specify an exception when `MediaMetadataRetriever.setDataSource()` is called to facilitate test exception-handling code.
* Abstracted data source specification into an opaque ID class `org.robolectric.shadows.util.DataSource` so that we don't have to specify every different flavour of data source specification in the `addFrame()/addException()/addMetadata()` methods.
* Plan in pipeline to reuse `DataSource` with similar enhancements to `ShadowMediaPlayer`.