Remove _width and _height

SDL_Surface has these members internally, so our local copies are
completely unnecessary.
Ensure surface pitch == width

This allows us to use SDL blitting routines, instead of rolling our
own (incorrect) drawing methods to accomodate our legacy data. We
can switch back to SDL_CreateRGBSurface() once all our code is aware
that surface width != pitch.
Create display::PalettizedSurface

A Surface is now a generic 2D array of pixels that knows how to
operate on its contents. The game only really has one type of Surface
right now -- a PalettizedSurface -- which is a kind of Surface that
uses 8-bit pixel values pointing into a Palette, supporting optional
transparency.

display::Image no longer exists. In its stead is display::image::*
functions which can read a buffer of PNG data and return a Surface.
display/image/* is just for image I/O.
Replace display::image's direct SDL surface access with a function
Re-work LegacyPalette to contain the pal[] array

This will let us use multiple LegacyPalettes, and eliminates the
implicit receiver on display::legacy_palette; it's now
graphics.paletteInterface(), mirroring the way .screen() is used.