Move fixed point definitions to their own function
Add 32-bit fixed point type
game: Fix alien speed increase as they get killed

This was broken for the longest time because the fixed point type didn't
have enough precision to represent the speed increase.  Using fixed32,
there is enough precision.

To get this working, |current_alien_speed| had to be turned into a fixed
variable.

And when multiplying it by |delta|, cast |delta| to a signed int.
game: Keep searching for next alien to activate

If the one above the one that was just killed is also dead, keep searching
upwards.
game: Fix collision loop logic

When an object created in the outer for loop collides with something in
the inner for loop, and is destroyed, break out of the inner loop instead
of continuing.
game entity: Aliens break through shields

They don't get killed in the collision.
Add fixed/fixed32 conversion macros
event counter: reset stats after each report

This way, the numbers in each report reflect the time since the last
report.
game entity: change right/bottom limits to signed ints

They are compared against position (signed) in the movement() functions,
so they should be signed too.

When they were unsigned, it occasionally caused a glitch in alien movement
where a negative x position (left edge) was counted as a collision with
the right edge of the screen.
game: Separate alien-player and alien-shield collision checks

This doesn't change the game mechanics or timing by much.

For the record, I cherry picked this example of a major bottleneck.

Average stats over last 100 loops:
- Collision checks: 481
- Movement calls: 62
- Loop time in ticks: 58
- Per-section game logic times: _ 2 _ _ _ _ 43 3
- Total game logic time in ticks: 50
game: Check collisions vs shields in only one group

If an object collides with one shield group, it doesn't collide with
other shield groups.

Average stats over last 100 loops:
- Collision checks: 364
- Movement calls: 62
- Loop time in ticks: 31
- Per-section game logic times: _ 2 _ _ _ _ 19 3
- Total game logic time in ticks: 25
game entity: Add functions to get width and height
game: Check alien-player collision by rows

This way, we can also check if the player collides with the entire row.
That saves a few checks.

Before this patch, no alien-shield collisions:

Average stats over last 100 loops:
- Collision checks: 242
- Movement calls: 61
- Loop time in ticks: 16
- Per-section game logic times: _ 2 _ _ _ _ 5 3
- Total game logic time in ticks: 11

After this patch, no alien-shield collisions:

Average stats over last 100 loops:
- Collision checks: 182
- Movement calls: 61
- Loop time in ticks: 16
- Per-section game logic times: _ 2 _ _ _ _ 4 3
- Total game logic time in ticks: 10
game: Skip rows of aliens when checking vs shields

No shield-alien collisions, with a few shots from aliens:

Average stats over last 100 loops:
- Collision checks: 13
- Movement calls: 64
- Loop time in ticks: 16
- Per-section game logic times: _ 2 _ _ _ _ _ 3
- Total game logic time in ticks: 6

Number of collisions checks: 182 -> 13
Game logic time: 10 -> 6 ticks

With shield-alien collisions, the stats are still pretty bad:

Average stats over last 100 loops:
- Collision checks: 82
- Movement calls: 61
- Loop time in ticks: 32
- Per-section game logic times: _ 2 _ _ _ _ 21 3
- Total game logic time in ticks: 27