Significant Performance Improvements in Exchange for slight loss of fidelity

If you look in instruments the original version was spending way too much time doing objc stuff - method dispatch/dealloc.

This patch switches to straight C code for the main loop. As part of that it approximates the colors rather than using the exact pixel values. This might even result in improved behavior as similar colors are bucketed together.

Maybe it should be a switch or something in case a user wants exact colors, but a 150x performance improvement seems worthwhile.