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 =)
Let's say the user passes the array `[1:5]`. Then `T` is `Int`, but then expressions like `f*xm + (1-f)*xp` that occur in linear interpolation will return a `Float64`. So in this case `T` should be `Float64`. I suspect you'll need to have this function compute `T` (the `T` used to construct the `Interpolation` object) based on the computations that will be required and the type of the input.

This is a problem inherited from Grid, from back when I didn't know any better. There, I tried to mitigate it by forcing people to supply `FloatingPoint` array types, but for Interpolations we should try to do better.