screen: Add tile layer API

Add functions to set tile layer registers and map data.
data: Update shield image to 16x16 chunks of 2x2 shields

Instead of an 8x8 square, the shields are represented by 16x16 squares,
each containing 2x2 shield pieces, each piece 8x8.  There are 16 such
2x2 chunks to represent all possible combinations of shield pieces and
empty spaces within a 2x2 section.
screen: Add function for image lookup

This is a workaround for class Game to access the image offsets.  Might
need a better solution later.
game: Set up tile layer for shield drawing
Add shield group tilemap buffers

These will be used to draw the shield groups.

Game data size: 1331 -> 1375 bytes
Other sizes unchanged.
Loop time unchanged.
shields: add function to draw shields
screen: add #define for tile size
game: Set offset of tile layer for shield groups

Using Tile Layer 0 to draw the shield groups.  The leftmost group's
upper left corner will be at (0, 0) in the tile layer.  So shift the
tile layer by the location of the leftmost shield group.
game: Update shields to use shield group buffers for drawing

But keep the old code for creating shield game entities and then drawing
them as entities.  That's for backwards compatibility with the original.

TODO: need to remove that, have the computer version support tile-based
shields too.

Game loop time and data size unchanged.
game entity: add dirty bit for redrawing
game entity: Update usage of alive and active flags

For aliens, "active" means they're firing at you.
For other entities, "active" is analogous to "alive" for aliens.

Since the drawing of entities is governed by the "alive" flag, it should
be set/cleared for non-alien entities that are (in)active.

This patch updates (de)activate() to set the "alive" flag to the same
value as the "active" flag.  This takes care of bonus, explosions, shots,
etc, that had their "alive" flags set even after being deactivated, and
were still being drawn.

For aliens, there is a special initializer where the alive flag can be set
even if the active flag is not.

Note that this patch leaves the game logic unchanged.  It changes the
internal mechanics of the game entities without changing the external
semantics of activate/deactivate.
screen: remove image offset lookup API
images: Remove index parameter from get_image_offset

The Images class should not have any concept of sprite frame sizes, so it
won't know how much to offset given an image index.

That is up to the screen class to compute.
Store full sprite dimensions rather than dimension codes

Convert them to dimension bit codes locally when allocating sprites.

This way, class Screen can also use them to determine the size of the
sprites in VRAM.

Game entity type properties: 253 -> 264 bytes
screen: Animate sprites by updating their data offsets

Get the offset of the current frame: image index * sprite size.

Per-loop stats, averaged over 500 loops:
- Collision checks: 264
- Duration calls: 0
- Movement calls: 63
- Loop time in ticks: 17
- Game logic section 0, time in ticks: 0
- Game logic section 1, time in ticks: 2
- Game logic section 2, time in ticks: 0
- Game logic section 3, time in ticks: 0
- Game logic section 4, time in ticks: 0
- Game logic section 5, time in ticks: 0
- Game logic section 6, time in ticks: 5
- Game logic section 7, time in ticks: 6
- Total game logic time in ticks: 15