[vector-api] HiDPI (Retina) support for WMS single image layers

@fredj and I worked together on this one.

This PR adds HiDPI (Retina) support for WMS single image layers to the canvas renderer. The effect can be seen on devices with a `devicePixelRatio` > 1 in the `wms-image` and `wms-image-custom-proj` examples.

Key features of this PR:
* Correction of the transform for HiDPI images
* A refactoring of the single image WMS GetMap query logic, including:
* Ensuring that the HEIGHT and WIDTH of the image is always an integer
* Ensuring that the BBOX of the image properly matches the HEIGHT and WIDTH of the image
* Ensuring that the DPI passed to GeoServer is always an integer
* A similar refactoring for tiled WMS GetMap query logic, in anticipation of HiDPI for `ol.source.TileWMS`
* Minor clean-ups and garbage reduction