make init more straightforward; fix image to be actually square; write out full image at the end; flip order so that we're finding the average color near the *new* xy point we are about to fill, not the old one we already filled
fix bug where we created a slightly-too-small canvas because we had removed one color from teh colorset before querying its size in order to determine the canvas dimensions
make canvas.find_blank_nearby_opt() first check next-door pixels (seems faster and makes smoother images); add ability to just pick anything from the set of eligible adjacent-to-something pixels, though this results in speckly images
new approach: populate canvas with a few random pixels, then iterate over all colors, finding the pixel whose average-of-neighbors is closest to that color

This seems to be a little bit prettier and smoother than the other approach.  For example, there are no random-walk "slug trails" like you often see with the other approach.  However, for now this also seems to be slower.