Add a checkPaletteCompatibility() method

This ensures that we don't do anything stupid with surfaces, like
trying to copy to an 8bpp surface with an all-black palette.
Twiddle draw() signature

It now accepts either a boost::shared_ptr<Surface> or a Surface&. Both
are const, as drawing never modifies the source surface. There's also a
4-arg version for blitting a subset of the source surface, which is
useful in some downstream code.