Rewrite with clear separation of concerns (closes #2)

I just started working on some documentation for how I envision the pieces of this library to fit together. Most of this is obviously just sketches and fairy tales at the moment, but at least it might give us something to discuss and improve on. I'm hoping that discussions around these documents can help finalize some decisions that are probably easier to make before writing macro-heavy code than after =)
This is probably fine for getting started, but it will be problematic for performance. This allocates a lot of memory for every pencil. Perhaps it would be best to just do it this way for now, and then my main contribution can be to see whether I can come up with a package that does this prefiltering very efficiently (including cache-friendliness). I've already done something like this for Images in the `imfilter_gaussian` function, it just might need some generalization.