Fixes CanvasPixelArray set polyfill (#4974)

what this PR does to fix #4974 is to inspect the actual image data returned from the canvas context.
If the browser supports Uint8ClampedArray and the image data is of that type we are all set and can return.

if not, we need to check if there might be a set function available. if that is not the case, we wrap the createImageData function and add a set function to it.
As far as I could figure out it is not possible to add it to the CanvasPixelArray prototype used by Chrome 17.
well i manually tested the browser versions. they do not have it. I do not see why we would need to doublecheck here. there is no magic way these 3 year old versions get that method back :)