Separate "desktop" and "mobile" zoom calculations.

This ensures that the layout viewport responds to each type of zoom correctly, and lays the ground for CSS Media Queries and CSS Device Adaption.

Note: The `device_pixel_ratio` and `visible_viewport` properties are currenty unused, but will be needed in the near future to properly implement `window.devicePixelRatio`, `window.innerWidth`, the `resolution` media query, etc.

Until we have proper touch support, mobile-style "pinch" zoom can be simulated by holding Ctrl while scrolling with a mousewheel or trackpad gesture.