game: store shield data as array of flags

The flags indicate the state (1 = intact, 0 = destroyed).
The position in the array can be used to determine location x, y.

Whenever GameEntity functions need to be called on the shields, just
create a temporary GameEntity for it on the fly.  This saves a ton of
memory.

Game data memory on AVR: 2533 -> 1669 bytes
game: Print event counter report on exit

This way we get event stats even if few cycles have elapsed.
Remove game dependency on image filenames

Eventually, there won't be files on the embedded target.  At least not
PNG files.  So eliminate filename-to-index lookup in class Game.  Instead
store images as <type, index>, where type is the game entity type.  This
means only the index of the images of |type| has to be stored.

Example:
  alien-1-3.png -> type=ALIEN, index=2

When the entity's draw() func schedules a blit, it passes <type, index>
instead of the image file index.  The images library will internally look
up the image based on the pair <type, index>.  Thus, all the image
filenames can be removed from Game.

Also, Game no longer needs to store a pointer to the image library.
screen: remove unused extern variables
Add #ifdefs to stub out SDL on non-x86 systems
System: Move SDL init code from Screen

Changes:
 - Add System::init() which calls SDL_Init().
 - Screen::set_video_mode() has been renamed to Screen::init().
 - Removed the fullscreen option.
system: add AVR initialization code