Viewport scaling and display density independence

<b>Viewport Scaling</b>
The view is scaled to be as large as possible, without changing the aspect, within the bounds of the window.

<b>Display Density Independence</b>
On "retina" displays, or other displays where window units != pixels, the view should no longer draw incorrectly.

<b>Notes:</b>
* I couldn't test with Qt (on a Mac and not getting the right GL context). I suspect it might not be fixed on high density displays. See in-line comment.
* I originally made these changes on top of #83, so it should be good to go before or after that PR.
Personally, I prefer `std::pair<u32,u32>`.