func drawUnder(dst draw.Image, r image.Rectangle, src image.Image, sp image.Point) {
	if dst, ok := dst.(*image.Paletted); ok {
		if src, ok := src.(image.PalettedImage); ok {
			if samePalette(dst.Palette, src.ColorModel().(color.Palette)) {
				drawPalettedUnder(dst, r, src, sp)
			}
		}
	}
	drawGenericUnder(dst, r, src, sp)
}
BUG: these drawing routines may be incorrect when src and dst overlap
DrawUnder aligns r.Min in dst with sp in src and replaces r with the result of (src over dst).
package nitro
import (
	"image"
	"image/color"
	"image/draw"
	"math"
)