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 =)
One of the things that would be nice to support would be `AbstractArray`s like `Image`s. One can add another parameter, `AT<:AbstractArray` and then declare `coefs::AT`. Without further changes to julia one can't declare that `AT` is really an `AbstractArray{T,N}`, but (if desired) the constructor can enforce about such things. See http://docs.julialang.org/en/latest/manual/faq/#how-should-i-declare-abstract-container-type-fields.