Preparations for resolution scaling.
Add basic units.

(Notably absent is `MS` as I've already defined the `newtype Millis()`)
Add conversion functions
Switch visibility to public
Use units where appropriate. (Velocity & Accel)
Changed `Millis()` from newtype to simple alias.

Used it where applicable
Change units::Pixel to i32 b/c that's primarily what `rust-sdl2` uses.
Use units::Game & units::Pixel in sprite class.
Define screen resolution in terms of `units::Tile`s

* Screen resolution is defined as "x" rows and "y" columns of `units::Tile`s
* Backdrop size is defined as 4 `units::Tile`s
Graphics now converts tile-size to pixels

(For some reason: `rust-sdl2`'s `video::Window` takes `int` for
 width & height instead of `i32` like surfaces, rects, etc.

 Since there's no automatic coercion I have to cast to a primitive.)
Update collisions to use [resolution independent, high-precision] `units::Game`

* Also fixes `map` class to use tiles & conversions where appropriate.
Collision detection becomes tile-based.

Tiles are converted to `units::Game` @ callsite.
Use high-resolution (f64) `units::Game` for physics & collision

`sprite::draw()` will do implicit conversion to `units::Pixel` for
absolute positioning on screen; so we don't need to round while doing
physics calcs.
Convert from resolution (in tiles) to resolution (in game units)
Woo, unused import!

(Means player.rs isn't doing any rounding anymore, this is good.)
Merge branch 'feature/res'

This is a major refactoring where certain primitives were aliased to unit names.
This makes our API a bit more explicit in what it excepts & emits; this also
gives us well defined conversions between density-dependent units (pixels)
and density-independent units ('games')

This is NOT the game as of `ep-018` of the series.
Still on the docket:

* Fix issues w/ sprites
* Sprites still using `TILE_SIZE` constant
* `units::game_to_pixel()` needs an actual conversion