Resubmit: Adding support for Widevine (merged changes by @colde)

* Adding Widevine support.
* Extending PlayReady support with optional CustomData.
* Adding option to override protectionData (including laUrl, cdmData &
license request headers) when instantiating the player.
* Moved parsing of CDM message into respective DRM license acquirers.
I do not quite understand why we need a custom function to check that the string is null or empty. Are there any cases where a simple ```if (!str) {...}``` won't work? Even if there are such cases I think that we should not modify native js objects this way. Also ```'Extensions'``` in file name implies that some basic player functionality in this file can be extended. ```String.isNullOrEmpty``` rather an utility method than an extension. So, if we do need this function my proposal is to rename it into ```StringMethods.js``` (or something similar) and put into ```utils``` namespace:
```
MediaPlayer.utils.StringMethods = function () {
	return: {
		isNullOrEmpty: function(str) {
		/*...*/
		}
	}
}
```
Also, it is not clear why the second argument is used to check for 'undefined' value? We can just compare ```str === undefined```, or, at least ```str === void(0)```. Finally ```str === 'undefined'``` returns true for the string ```'undefined'``` that is actually neither null nor empty.