Added ability to specify an exception for setDataSource(). Abstracted data source spec into an opaque ID class that will be reused by ShadowMediaPlayer in a future commit.