Refactoring source image usage in CanvasRenderingContext2D

This change fixes a number of spec compliance and unsupported use case
issues with the drawImage and createPattern canvas API methods.

The CanvasImageSource abstration was added to greatly simplify
code in CanvasRenderingContext2D and make the code more
maintainable for future improvements to drawImage.

BUG=347265,347229,343916,343662,113592
R=senorblanco@chromium.org

Review URL: https://codereview.chromium.org/181693006

git-svn-id: svn://svn.chromium.org/blink/trunk@168864 bbb929c8-8fbe-4397-9dbb-9b2b20218538