* WIP: Invader AI
- Adds debug mode for visualizing bounding boxes
- Adds rectangle and line drawing (for debug mode)
- Invaders move as a close approximation to the original game
- TODO: Demonstrates that the blit function needs to ignore black pixels (or "transparency")
- TODO: The invader movement code is really bad
* clippy and fmt
* Refactor Invader movement
* Support "transparency" in blit function
* Scale player movement to 60 pixels per second, regardless of frame rate.
* Add assertions in blit to prevent drawing out of bounds
* Add bullets, shoot with space
* Add lasers, and improve the bullet animation a little bit
* fmt
- `SpriteRef` impls `Animation`, `Sprite` does not
- Animation duration and delta time now lives on the struct that handles the animation "state machine"
- Tweak the player animation to 100ms frame duration (was 50ms)
* Refactor SpriteCache and animations
- Animation frames are now enumerated
- Renamed the `Sprites` trait into the more apt `Drawable`
- Moved animation to a default impl on `Drawable`
- Added the Cthulhu invader
- Clarify that `World::step_invaders()` is only needed for handling the invader grid
- Renamed `Cannon` to `Bullet`
* Improve readability of some `SpriteCache` uses.