Add image and color objects along with functions to manipulate them

Images require some extra handling as they are loaded asynchronously.  This means that the draw method may have to defer running for a few cycles until any images loaded by loadImage are in memory and available for use.