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.
unfortunately there is no easy way to know what type the data array will have without creating it. What we could do is assume that browsers who support Uint8ClampedArray will use that for backing the canvas. But I do not know if that holds true.