Support `devicePixelRatio` !== 1. Fixes resize issues on Retina displays.

@allisoncorey @eric79 @BrettASwift, this keeps the canvas' CSS size correct on high-resolution displays that  have multiple physical pixels per CSS pixel. It also sizes the canvas internally for physical pixels to enable high-resolution rendering.

`view/threejs` wants `width`/`height` to be in CSS pixels since it's used to interpret mouse positions. The three.js function `setSize` accepts CSS pixels and applies `devicePixelRatio` internally.

This whole section is a mess though. I didn't want to risk breaking something, but all we really need is to watch for the resize and call `renderer.setSize( window.innerWidth, window.innerHeight )`, then update the camera. There's no reason for all the comparisons between window, canvas internal, and canvas external coordinates.

Even better, the canvas size should be controlled by CSS and not by the driver, then we would just watch for canvas resizes and call `renderer.setSize( canvas.clientWidth, canvas.clientHeight, false )`. The driver's `width`/`height` could go away since we can get those from the canvas.